Черный фон при конвертации картинки в php из png в jpg
При загрузке png картинки посредством php и конвертации их в jpg прозрачный фон становился черным, что портило всю картину.
Но есть решение, достаточно нарисать белый квадрат на заднем фоне и потом уже на заготовку перекладывать png картинку и сохранять в jgp, тогда всё ОК
Вот мой код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
function img_resize($src, $dest, $width, $height, $quality=97) { if(!file_exists($src)) return 1; // исходный файля не найден $size=getimagesize($src); if($size===false) return 2; // не удалось получить параметры файла // Определяем исходный формат по MIME-информации и выбираем соответствующую imagecreatefrom-функцию. $format=strtolower(substr($size['mime'], strpos($size['mime'], '/')+1)); $icfunc="imagecreatefrom".$format; if(!function_exists($icfunc)) return 3; // не существует подходящей функции преобразования // Определяем необходимость преобразования размера if( $width<$size[0] || $height<$size[1] ) $ratio = min($width/$size[0],$height/$size[1]); else $ratio=1; $width=floor($size[0]*$ratio); $height=floor($size[1]*$ratio); $isrc=$icfunc($src); $idest=imagecreatetruecolor($width,$height); //если это было png, то делаем белую подложку if ($icfunc=="imagecreatefrompng") { $bgc = imagecolorallocate($idest, 255, 255, 255); imagefilledrectangle($idest, 0, 0, $width, $height, $bgc); } imagecopyresampled($idest,$isrc,0,0,0,0,$width,$height,$size[0],$size[1]); imagejpeg($idest,$dest,$quality); chmod($dest,0666); imagedestroy($isrc); imagedestroy($idest); return 0; // успешно } // uploadfile - какой файл взять и как сохранить, я просто переписываю, 400 - это размер ресайза, ширина и высота img_resize($uploadfile, $uploadfile, "400", "400"); |
Все довольно просто оказалось, а мучаться можно много.