Преобразование изображения JPEG в меньшее количество цветов через PHP - PullRequest
0 голосов
/ 27 ноября 2011

Мне нужно уменьшить количество цветов в изображении, так как сейчас буквы на моем изображении имеют много оттенков черного, мне нужно было бы превратить все темные цвета в настоящий черный и так далее, поэтому я предполагаю, уменьшая количество цветов, я использую следующий код (он обрезает картинку и, как предполагается, уменьшает количество цветов), однако, кажется, что bak точно такое же изображение?

<?
$filename = 'img1.jpg';

list($current_width, $current_height) = getimagesize($filename);

$C = 8;
$A = 5;
$B = 52;
$D = 11;

// Resample the image
$canvas = imagecreatetruecolor($B, $D);
imagetruecolortopalette($canvas, false, 20); // Supposed to only have 20 colours?? 
$current_image = imagecreatefromjpeg($filename);
imagecopy($canvas, $current_image, 0, 0, $C, $A, $B, $D);

imagejpeg($canvas, "img2.jpg", 100);
echo "<img src='img2.jpg'/>";
?>

Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 27 ноября 2011

Некоторое время назад я написал функцию для этого.

function alpha($image,$r=0,$g=0,$b=0){
$width=imagesx($image);
$height=imagesy($image);
$aw=0;
$ah=0;
for(;;){
if ($aw==$width) {$aw=0; $ah++;}
if ($ah==$height) break;
$rgb = imagecolorat($image, $aw, $ah);
$colors = imagecolorsforindex($image, $rgb);
$ar = $colors['red'];
$ag = $colors['green'];
$ab = $colors['blue'];
$ar+=$r;
$ag+=$g;
$ab+=$b;
if ($ar>255) $ar=255;
if ($ag>255) $ag=255;
if ($ab>255) $ab=255;
if ($ar<0) $ar=0;
if ($ag<0) $ag=0;
if ($ab<0) $ab=0;
$newcolor = imagecolorallocate($image, $ar, $ag, $ab);
$black = imagecolorallocate($image, 0, 55, 0);
imagesetpixel ($image , $aw , $ah , $newcolor );
$aw++;
}//end loop
return $image;}

Вы можете отрегулировать RGB всего изображения с помощью положительных или отрицательных целых чисел, например

, чтобы удалить красные цвета

alpha($image,-225,0,0);

Обратите внимание, что имя функции: alpha фактически не имеет никакого отношения к альфа-каналу.Это может сделать изображение таким, как будто оно имеет эффект альфа-канала.

0 голосов
/ 27 ноября 2011

JPEG не является форматом на основе палитры, поэтому результаты вызова imagetruecolortopalette не определены четко.Создайте вывод в формате изображения, который поддерживает цвета палитры, например PNG или GIF.

(Кроме того, если вы просто работаете со статическим изображением, почему бы вам просто не исправить изображение в редакторе?)

...