【问题标题】:Imagick roundCorners makes image half-transparantImagick roundCorners 使图像半透明
【发布时间】:2011-06-17 07:27:42
【问题描述】:

我正在为我正在制作的网站编写图像脚本,对于其中一种图像模式,我需要裁剪图像并为其制作圆角。这是我现在使用的代码:

$img = new Imagick();
$img->readImageBlob($data);
$img->resizeImage($width, $height, $img->FILTER_GAUSSIAN, 1);
$canvas = new Imagick();
$canvas->newImage($size[0], $size[1], new ImagickPixel('white'));
$canvas->compositeImage($img, imagick::COMPOSITE_OVER, 0, 0);
$canvas->roundCorners(10, 10);
$canvas->setImageFormat('png');

Resulting image

但是,如上所示,生成的图像大约是半透明的,除了边缘周围的 10-ish 像素边框,我假设是由 roundCorner 创建的。我尝试了很多不同的方法,包括直接裁剪 $img 并在其上使用roundCorner,但结果是没有圆角。

我怀疑compositeImage 是这出戏中的小偷,但我不能肯定地说。有人吗?

编辑:更正:如果我进行裁剪和圆形解决方案,我最终会得到圆角,但它们有黑色背景。这是我在这里使用的代码。有人发现错误/解决方案吗?

$img = new Imagick();
$img->readImageBlob($data);
$img->resizeImage($width, $height, $img->FILTER_GAUSSIAN, 1);
$img->cropImage($size[0], $size[1], 0, 0);
$img->roundCorners(10, 10);

编辑 2: 裁剪和圆形分辨率的解决方案是确保它是 png,因此它具有 alpha 支持。但是,结果与我的原始代码生成的结果相同。

编辑 3: 在我的部署服务器上尝试了这个脚本,它按照我的意愿工作,所以看起来 macports 附带的 imagick / php-imagick 版本存在一些问题。感谢大家的帮助!

【问题讨论】:

  • 如果您在网页上展示图片,您可以使用 CSS 为它们添加圆角。 (是的,包括在 IE 中,如果你使用 CSS3Pie)
  • 当然可以,但我希望脚本为我执行此操作,因为我可能想根据那些圆角添加额外的效果,此外,它会很有趣正常工作:)

标签: php imagemagick imagick


【解决方案1】:

你可以告诉 imagemagick 给你一个 alpha 背景

$img->setImageAlphaChannel ( imagick::ALPHACHANNEL_TRANSPARENT )

或在进行任何转换之前尝试将图像格式显式设置为 PNG24。

这里的顺序很重要,图像在暴露背景之前需要一个 Alpha 通道。

【讨论】:

  • 哇,错过了我的图像不一定是 png 的可能性,因此修复了我的版本之间的结果差异。原来的问题仍然存在:(
【解决方案2】:

这是当前 macports 附带的 Imagick / php-imagick 版本的问题。尚未为我的计算机解决此问题,但该脚本在我的部署服务器上按预期工作。

【讨论】:

    猜你喜欢
    • 2015-12-07
    • 1970-01-01
    • 2011-07-01
    • 2018-03-30
    • 2016-02-26
    • 2011-09-15
    • 2010-12-01
    • 2020-02-26
    • 1970-01-01
    相关资源
    最近更新 更多