【发布时间】:2016-07-04 01:42:00
【问题描述】:
每当我在具有透明度的 PNG 上调用 PHP GD 的 imagecrop() 时,它会将透明部分变为黑色而不是保持它。
我最近编写了一个函数来缩放透明 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;
}
上面的这个函数工作正常,但是当我也尝试在同一个 PNG 上执行 imagecrop() 时,这是我得到黑色背景的时候。
有什么简单的方法可以成功地进行这种裁剪吗?我似乎找不到任何好的例子。
如果可能的话,我宁愿不必编写另一个像上面那样的复杂函数来使用 x、y、w、h 和 imagecopyresampled() 裁剪图像,因为这是一个主要的球痛。
那里有任何 GD 研究人员愿意将他们宝贵的知识传授给我吗?
【问题讨论】:
-
@cmorrissey 我的问题是是否有办法在不编写函数的情况下做到这一点,如果没有,那么该函数可能是什么样子。但是,当这实际上是一个合法的问题时,感谢您的完全无用的评论和投反对票。
-
我们没有听说要为您编写代码,如果您的代码有错误,我们可以提供帮助。你有一个调整大小函数的例子,修改它来裁剪图像很简单,你也可以谷歌这个,你会得到 100 种不同的资源。
-
@cmorrissey 显然这对我来说不是微不足道的,或者我已经完成了......可能比我写这篇文章的时间还短。
标签: php image png transparency crop