Изображения JPEG Включите все черное при преобразовании из PNG с PHP - PullRequest
2 голосов
/ 26 октября 2010

Проблема: при преобразовании любого изображения PNG в JPEG изображение становится черным .

Чтобы начать, я искал в Интернете и в стеке поток, чтобы узнать, каксделай это.Я перепробовал каждый метод, который мог найти в руководстве по PHP и в переполнении стека.Проблема все еще существует.Я использую GD (не установлен ImageMagick).

Мой код приведен ниже.Это вызов функции:

$tempImage = $dirPath.$filename.$tempMini.".jpg";           
createTempImage($sourcefile, $tempImage, $tempMini_width, $tempMini_height, 100);

Я прокомментировал различные методы, которые я пробовал.

function createTempImage($sourcefile, $setNewName, $maxwidth, $maxheight, $quality){

$fileInfoArray = getimagesize($sourcefile);
$imagetype = $fileInfoArray['mime'];

if($imagetype == 'image/jpeg'){
    $img = imagecreatefromjpeg($sourcefile);

}elseif($imagetype == 'image/gif'){
    $img = imagecreatefromgif($sourcefile);

}elseif(($imagetype == 'image/png')||($imagetype == 'image/x-png')){
    $img = imagecreatefrompng($sourcefile);
}

$width = imagesx( $img );
$height = imagesy( $img );

if ($width > $maxwidth || $height > $maxheight){
    $factor = min(($maxwidth/$width),($maxheight/$height));
    $newwidth = round($width*$factor);
    $newheight = round($height*$factor);
} else {
    $newwidth = $width;
    $newheight = $height;
}   


$tmpimg = imagecreatetruecolor( $newwidth, $newheight );
imagecopyresampled($tmpimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height );
imagejpeg($tmpimg, $setNewName, 100);

imagedestroy($tmpimg);
imagedestroy($img);

}

Следующиетакже была предпринята попытка:

$white = imagecolorallocate($tmpimg, 255, 255, 255);
ImageFill($tmpimg, 0, 0, $white);
ImageSaveAlpha($tmpimg, false);
ImageAlphaBlending($tmpimg, false);
$white = imagecolorallocate($tmpimg,  255, 255, 255);
imagefilledrectangle($tmpimg, 0, 0, $newwidth, $newheight, $white);

Обновление: верхний черный ящик - результат изображения: http://twitpic.com/30ywf5

Ответы [ 2 ]

1 голос
/ 26 октября 2010

Просто пара идей:

  • $newHeight = $maxheight; кажется опечаткой, "newheight" пишется без заглавной буквы "H" по всему коду.

  • Код для определения нового размера может быть значительно сокращен:

if ($width > $maxwidth || $height > $maxheight){
$factor = min(($maxwidth/$width),($maxheight/$height));
$newwidth = round($width*$factor);
$newheight = round($height*$factor); }

  • Вы используете imagecopyresampled для создания нового образа - это работает только в определенных GD-версиях («версия 2»), попробуйте использовать imagecopyresized в противном случае.
0 голосов
/ 26 октября 2010

Кажется, я решил проблему, воссоздав всю функцию с нуля. Спасибо, ребята, за ваш вклад.

Проблема заключалась в том, что PNG не загружался. При выполнении скрипта с уже загруженными URL-адресами он работал нормально.

Еще раз спасибо.

...