Помогите ребят. Нужно сконвертировать вот такую капчу в jpg http://zalil.ru/33627679 . Знаю про библиотеку GD, любые обычные png конвертирует на ура, но не эту капчу, на выходе получаю черную картинку.
первую же ссылку в яндексе потестил PHP: <?php function image_change_alphaColor(& $image, $_transparent_color) { set_time_limit(0); if(empty($_transparent_color)) $_transparent_color = imagecolorallocatealpha( $image , 255, 255, 255, 0 ); $_tc = imagecolorsforindex($image, $_transparent_color); imagealphablending($image, false); for($x = 0; $x < imagesx($image); $x++) for($y = 0; $y < imagesy($image); $y++){ $color = imagecolorat($image, $x, $y); if($color != $_transparent_color){ $c = imagecolorsforindex($image, $color); foreach($c as $ci => $v) $$ci = & $c[$ci]; if(!isset($alpha)); elseif($alpha == 127){ imagefill($image, $x, $y, $_transparent_color); }elseif($alpha > 0){ foreach($c as $ci => $v) $$ci = round( ( $_tc[$ci] * $alpha + ( ($ci == 'alpha')? 0 : $$ci * (127 - $alpha) ) ) / 127 ); $new_color = imagecolorallocatealpha( $image , $red , $green , $blue, $alpha ); imagefill($image, $x, $y, $new_color); } } } imagesavealpha($image, true); } $im=imagecreatefrompng("c.png"); image_change_alphaColor($im, imagecolorallocatealpha($im, 255, 255, 255, 0)); imagesavealpha($im, false); imagejpeg($im, "WAZZUP.jpg"); ?> <img src="WAZZUP.jpg"> чувствую, 90% кода тут лишние, но работает
Проблема в том, что у той капчи прозрачный фон, а буквы черные. jpg прозрачного фона не порддерживает, соответственно нужно от него избавиться. Вообще у гд есть функция для этого, вроде, но можно ещё тупо на белую пику наложить.
Решил с помощью наложения одного изображения на второе. Code: use Image::Magick; $background=Image::Magick->new; $logo = Image::Magick->new; $background->Read("png:white.png"); $logo->Read("jpg:c.png"); $background->Composite(image=>$logo,compose=>'over'); $background->Set(quality=>100); $background->Write("jpg:new.jpg");