image — Как вы можете использовать PHP GD imagecrop для PNG, сохраняя прозрачность?

Всякий раз, когда я вызываю PHP GD imagecrop () для PNG с прозрачностью, он превращает прозрачную часть в черный вместо того, чтобы поддерживать ее.

Недавно я написал функцию для масштабирования прозрачных PNG с сохранением прозрачности (см. Ниже), поэтому я понимаю, как использовать imagecopyresampled и т. Д.

function scale_png($image, $resize_w = FALSE, $resize_h = FALSE, $alpha = 127)
{
$src_w = imagesx($image);
$src_h = imagesy($image);
if (! $resize_w) {$resize_w = $src_w;}
if (! $resize_h) {$resize_h = $src_h;}
$output = imagecreatetruecolor($resize_w, $resize_h);
imagealphablending($output, FALSE);
imagesavealpha($output, TRUE);
$transparent = imagecolorallocatealpha($output, 255, 255, 255, $alpha);
imagefilledrectangle($output, 0, 0, $resize_w, $resize_h, $transparent);
imagecopyresampled($output, $image, 0, 0, 0, 0, $resize_w, $resize_h, $src_w, $src_h);

return $output;
}

Эта функция выше работает нормально, но когда я также пытаюсь сделать imagecrop () на том же PNG, это когда я получаю черный фон.

Есть ли простой способ успешно выполнить эту культуру? Кажется, я не могу найти хороших примеров.

Я бы предпочел не писать другую сложную функцию, подобную приведенной выше, чтобы обрезать изображение, используя x, y, w, h и imagecopyresampled (), если это возможно, так как это большая боль в мяче.

Есть ли какие-нибудь GD boffins там, чтобы передать свои ценные знания на меня?

1

Решение

Насколько я понимаю, здесь нет ничего сложного, вы должны сохранить альфа-каналы перед выполнением кадрирования.

$img = imagecreatefrompng("./cover.png");
imagealphablending($img, false);
imagesavealpha($img, true);
$resource = imagecrop($img, ['x' => 0, 'y' => 0, 'width' => 500, 'height' => 500]);
0

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

Других решений пока нет …

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