Потеря прозрачности PNG и GIF

У меня проблемы с работой с изображениями и php.

Я использую функцию, с помощью которой можно изменить размер изображения в соответствии с моими ограничениями, а затем создать новое изображение.

Проблема в том, что при изменении размера файла png или gif прозрачность теряется при создании изображений с черным фоном.

Вот функция:

// Resize image - preserve ratio of width and height.
function resizeImage($sourceImage, $targetImage, $maxWidth, $maxHeight, $quality = 70)
{
// Obtain image from given source file.
$info = getimagesize($sourceImage);
$imgtype = image_type_to_mime_type($info[2]);

switch ($imgtype) {
case 'image/jpeg':
$image = imagecreatefromjpeg($sourceImage);
break;
case 'image/png':
$image = imagecreatefrompng($sourceImage);
break;
default:
die('Invalid image type.');
}

// Get dimensions of source image.
list($origWidth, $origHeight) = getimagesize($sourceImage);

if ($maxWidth == 0)
{
$maxWidth  = $origWidth;
}

if ($maxHeight == 0)
{
$maxHeight = $origHeight;
}

// Calculate ratio of desired maximum sizes and original sizes.
$widthRatio = $maxWidth / $origWidth;
$heightRatio = $maxHeight / $origHeight;

// Ratio used for calculating new image dimensions.
$ratio = min($widthRatio, $heightRatio);

// Calculate new image dimensions.
$newWidth  = (int)$origWidth  * $ratio;
$newHeight = (int)$origHeight * $ratio;

// Create final image with new dimensions.
$newImage = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($newImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $origWidth, $origHeight);
imagejpeg($newImage, $targetImage, $quality);

// Free up the memory.
imagedestroy($image);
imagedestroy($newImage);

return true;
}

0

Решение

Вы всегда используете imagejpeg независимо от того, какое расширение вы получаете, есть также imagepng а также imagegif, Вы должны использовать их, если у вас есть .gif или .png

Я говорю об этой строке:

imagejpeg($newImage, $targetImage, $quality);

Вам следует позвонить imagejpeg, imagepng или же imagegif в зависимости от типа файла.

0

Другие решения

В дополнение к сохранению изображения в формате, который поддерживает прозрачность, вам также нужно указать GD скопировать информацию о прозрачности из источника. Для PNG-8 и GIF вы должны вручную скопировать и установить прозрачный цвет (см. imagecolortransparent) от источника до места назначения, а для PNG-24 необходимо сохранить альфа-канал (см. imagesavealpha).

0

По вопросам рекламы [email protected]