Tôi đang cố gắng sao chép chức năng mà Dribbble.com thực hiện với việc phát hiện các màu chủ đạo trong Hình ảnh. Trong hình dưới đây, bạn có thể thấy một ảnh chụp màn hình từ Dribbble.com cho thấy 8 màu chủ đạo trong hình ảnh ở bên trái. Đây là trang thực sự trong hình ảnh http://dribbble.com/shots/528033-Fresh-Easy?list=followingPhát hiện màu chính trong hình ảnh bằng PHP
Tôi cần phải làm điều này bằng PHP, khi tôi nhận được các màu tôi cần tôi sẽ lưu chúng vào cơ sở dữ liệu để xử lý không cần phải chạy trên mọi trang tải.
Sau một số nghiên cứu về cách lấy những màu này ra khỏi hình ảnh, một số người cho biết bạn chỉ cần kiểm tra pixel ảnh theo pixel và sau đó lưu các màu xuất hiện nhiều nhất. Nói khác có nhiều hơn với nó và rằng nhận được những màu sắc tồn tại thường xuyên nhất sẽ không cung cấp cho các ảnh hưởng mong muốn. Họ nói rằng bạn cần phải Quantize hình ảnh/màu sắc (Tôi bị mất vào thời điểm này).
Trong hình ảnh dưới đây chụp Dribble dưới đây là một thư viện Javascript rằng làm điều tương tự, trang đó có thể được xem tại đây http://lokeshdhakar.com/projects/color-thief/
Xem nguồn của trang mà tôi có thể nhìn thấy ở đó là một file javascript tên quantize.js
và kết quả thực sự tốt. Vì vậy, tôi hy vọng sẽ có thể làm những gì mà thư viện Javascript không nhưng với PHP và GD/ImageMagick
tôi đã tìm thấy chức năng này sẽ trở lại với màu sắc và đếm trong một hình ảnh với PHP nhưng kết quả khác với phiên bản Javascript ở trên và kết quả Dribble
/**
* Returns the colors of the image in an array, ordered in descending order, where the keys are the colors, and the values are the count of the color.
*
* @return array
*/
function Get_Color()
{
if (isset($this->image))
{
$PREVIEW_WIDTH = 150; //WE HAVE TO RESIZE THE IMAGE, BECAUSE WE ONLY NEED THE MOST SIGNIFICANT COLORS.
$PREVIEW_HEIGHT = 150;
$size = GetImageSize($this->image);
$scale=1;
if ($size[0]>0)
$scale = min($PREVIEW_WIDTH/$size[0], $PREVIEW_HEIGHT/$size[1]);
if ($scale < 1)
{
$width = floor($scale*$size[0]);
$height = floor($scale*$size[1]);
}
else
{
$width = $size[0];
$height = $size[1];
}
$image_resized = imagecreatetruecolor($width, $height);
if ($size[2]==1)
$image_orig=imagecreatefromgif($this->image);
if ($size[2]==2)
$image_orig=imagecreatefromjpeg($this->image);
if ($size[2]==3)
$image_orig=imagecreatefrompng($this->image);
imagecopyresampled($image_resized, $image_orig, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); //WE NEED NEAREST NEIGHBOR RESIZING, BECAUSE IT DOESN'T ALTER THE COLORS
$im = $image_resized;
$imgWidth = imagesx($im);
$imgHeight = imagesy($im);
for ($y=0; $y < $imgHeight; $y++)
{
for ($x=0; $x < $imgWidth; $x++)
{
$index = imagecolorat($im,$x,$y);
$Colors = imagecolorsforindex($im,$index);
$Colors['red']=intval((($Colors['red'])+15)/32)*32; //ROUND THE COLORS, TO REDUCE THE NUMBER OF COLORS, SO THE WON'T BE ANY NEARLY DUPLICATE COLORS!
$Colors['green']=intval((($Colors['green'])+15)/32)*32;
$Colors['blue']=intval((($Colors['blue'])+15)/32)*32;
if ($Colors['red']>=256)
$Colors['red']=240;
if ($Colors['green']>=256)
$Colors['green']=240;
if ($Colors['blue']>=256)
$Colors['blue']=240;
$hexarray[]=substr("0".dechex($Colors['red']),-2).substr("0".dechex($Colors['green']),-2).substr("0".dechex($Colors['blue']),-2);
}
}
$hexarray=array_count_values($hexarray);
natsort($hexarray);
$hexarray=array_reverse($hexarray,true);
return $hexarray;
}
else die("You must enter a filename! (\$image parameter)");
}
Vì vậy, tôi hỏi liệu có ai biết cách tôi có thể thực hiện tác vụ như vậy với PHP không? Có thể có điều gì đó đã tồn tại mà bạn biết hoặc bất kỳ mẹo nào để tôi tiến một bước gần hơn để thực hiện việc này sẽ được đánh giá cao
http://stackoverflow.com/questions/3468500/detect-overall-average-color-of-the-picture –
@aSeptik có vẻ như đang làm giống như mã tôi đã đăng đã là – JasonDavis
bạn đã thử chưa để tìm kiếm google cho ''php lấy bảng màu từ hình ảnh" 'tôi đã thành lập rất nhiều kết quả; chỉ cần hỏi ... –