У меня проблемы с работой с изображениями и 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;
}
Вы всегда используете imagejpeg
независимо от того, какое расширение вы получаете, есть также imagepng
а также imagegif
, Вы должны использовать их, если у вас есть .gif или .png
Я говорю об этой строке:
imagejpeg($newImage, $targetImage, $quality);
Вам следует позвонить imagejpeg
, imagepng
или же imagegif
в зависимости от типа файла.
В дополнение к сохранению изображения в формате, который поддерживает прозрачность, вам также нужно указать GD скопировать информацию о прозрачности из источника. Для PNG-8 и GIF вы должны вручную скопировать и установить прозрачный цвет (см. imagecolortransparent) от источника до места назначения, а для PNG-24 необходимо сохранить альфа-канал (см. imagesavealpha).