首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ImageMagick的Perl创建了非常大的JPEG缩略图

ImageMagick的Perl创建了非常大的JPEG缩略图
EN

Stack Overflow用户
提问于 2022-06-24 17:05:05
回答 1查看 95关注 0票数 3

我正在使用ImageMagick的Perl创建缩略图。我正在使用关于ImageMagick 图像优化从上一个这样的问题的建议

代码语言:javascript
复制
open my $file, $params->{'openFile'};
my $imageData = do { local $/; <$file> };

if ($params->{'size'} eq "largesized") {
    $thumbnailWidth = 1000;
    $thumbnailHeight = 1000;
}   

$image->BlobToImage($imageData);
$image->SetAttribute('quality' => 80);
$image->SetAttribute('compression' => 'JPEG');
$image->SetAttribute('sampling-factor' => '4:2:0');
$image->SetAttribute('interlace' => 'Plane');
$image->SetAttribute('gaussian-blur' => '0.05');
$image->Thumbnail('geometry' => $thumbnailWidth . "x" . $thumbnailHeight);

my $thumbnailData = $image->ImageToBlob();


open(my $file, '>', $params->{'saveFile'}) or return { 'thumbnailGenerated' => 0, error => "Could not open file '" . $params->{'saveFile'} . "'." };
print $file $thumbnailData;
close $file;

据我所知,这应该会创建一个优化的缩略图。然而,尽管输入图像为3088x2320,重量为1.6MB产生的缩略图在1000x1000实际上更大,只有2.3MB(对于那样的产生的缩略图在1000x1000来说,这似乎是相当大的)。注意:在示例中,它被裁剪了一点,因为上传图像的JavaScript强制一个人按设计选择1:1的裁剪。

我正在运行ImageMagick 6.9.10-68 Q16 x86_64 2021-10-14 (CentOS)。命令行等价物产生的图像比预期的要小(84 as ):

代码语言:javascript
复制
  convert -thumbnail 1000x1000 -quality 80 -compress JPEG -sampling-factor 4:2:0 -interlace Plane -gaussian-blur 0.05  imageMagickSampleImage.jpg imageMagickSampleImage3.jpg

这让我想知道SetAttribute属性是否没有传递给Thumbnail函数或其他什么东西。我发现PerlMagick在各个方面都不太完美,我一直在想,我是否只需要使用GD

我注意到缩略图仍然太大(并且比命令行大),但是如果删除所有"SetAttribute“行,缩略图就会变小。1000x1000缩略图的输出从2.4MB到976 to。这仍然比具有相同属性集的命令行大10倍以上。

我认为直接将一些属性移到ImageToBlob方法可能会有帮助,但它似乎根本改变不了结果。以下是这一尝试:

代码语言:javascript
复制
my $thumbnailData = $image->ImageToBlob('quality' => 40, 'compression' => 'JPEG', 'sampling-factor' => '4:2:0', 'interlace' => 'Plane', 'gaussian-blur' => '0.05');
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-26 01:15:55

问题显然是,尽管指定了JPEG压缩并输入了JPEG,但是ImageToBlob方法输出了一个PNG文件,正如@MarkSetchell在上面的注释中所观察到的那样。

来自https://www.oreilly.com/library/view/perl-graphics-programming/9781449358280/re70.html的一个有用的代码片段提供了解决方案。我相应地修改了代码,专门告诉ImageMagick输出JPEG:

代码语言:javascript
复制
 my $thumbnailData = $image->ImageToBlob(magick => 'jpeg');

1000x1000的图形从以前的庞大尺寸发展到了167 to。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72747319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档