【发布时间】:2015-02-13 22:52:34
【问题描述】:
我们有一个接受 PSD 文件的服务器。它会将其加载到一个新的 Imagick 对象中并为其创建 4 个 jpg 拇指。
奇怪的是第一个拇指,最大的那个看起来很棒。之后的每个拇指都会在图层使用描边效果时出现一些图像失真。
代码:
$image = new Imagick($fileName);
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
foreach ($thumbSizes as $key => $size) { //largest to smallest
if($size>$longestSide){
$size = $longestSide;
}
$this->image->thumbnailImage($size,$size,true);
$this->image->writeImage($nameBase . '-' . $key . ".$extension");
}
$image->destroy();
我不确定 Imagick 内部是如何工作的,但我的直觉告诉我,如果最大的拇指是准确的,那么之后的每个拇指都应该是准确的。
注意:我预计在调整图像大小时会出现一些图像失真。但是,如果您查看我发布的示例,它与您正常调整大小的工件不同。它正在改变一些文本的颜色。我认为调整笔画效果的大小是一个问题。但我会认为,因为我先将图像展平,所以笔触效果将不再存在。我可以传入同一个文件的 jpeg 表示形式,它会完美地调整它们的大小。
【问题讨论】:
-
示例图片显示给您了吗?它正在改变图像上的颜色,看看“01”。它是红色的,然后突然变黑。我完全希望缩小尺寸而不是改变颜色会导致图像失真。
-
@developerwjk 如果它以 JPG 而不是 PSD 开头,则不会发生
-
@Sean256 你能提供一个示例 psd 吗?这很可能是实际进行转换的包的问题 - 通常是 inkscape 或 rsvg。
-
我在想我是通过使用 mergeImageLayers 来避免这种情况
-
@developerwjk 你没有帮助.....图像明显不同,而且不一致。