当文件大小大于 2mb 时,Imagick 无法调整 GIF 图像的大小
Posted
技术标签:
【中文标题】当文件大小大于 2mb 时,Imagick 无法调整 GIF 图像的大小【英文标题】:Imagick fails resizing GIF images when file size is larger than 2mb 【发布时间】:2018-06-21 04:24:49 【问题描述】:我正在使用 Imagick php 扩展来将 GIF 图像调整为多种尺寸。当我尝试使用 3mb 大小的 GIF 图像时,它不会调整大小。但是对于小于 1mb 的图像,它们会成功调整大小。
如果有其他人遇到过这个问题,请指教!
这是我的代码
if ($extension === 'gif')
$imagick = new Imagick($_FILES['file']['tmp_name']);
foreach ($imageFolders as $imageFolder => $size)
if ($imagick->getImageWidth() > $size['minWidth'])
$width = $size['maxWidth'];
$height = $size['maxWidth'];
else
$width = $imagick->getImageWidth();
$height = $imagick->getImageHeight();
$imagick->coalesceImages();
do
$imagick->scaleImage($width, $height, Imagick::FILTER_BOX, 1);
while ($imagick->nextImage());
$imagick = $imagick->deconstructImages();
$imagick->writeImages($imagePath, true);
$imagick->clear();
$imagick->destroy();
结果:转换列表资源
File Area Memory Map Disk Thread Time
-------------------------------------------------------------------------------
768 7.951GB 3.7025GiB 7.4049GiB unlimited 2 unlimited
【问题讨论】:
请显示您的命令?你的 Imagemagick 是什么版本?输入图像尺寸和调整后的尺寸是多少? Imagemagick policy.xml 文件中有哪些限制?你得到什么错误信息?您可以在 Imagemagick 命令行中进行相同的调整大小吗?那样有用吗?也许服务器对输入或输出文件的大小进行了限制? @fmw42 我已经更新了这个问题。我没有使用命令,我使用的是 imagick php 代码。 myserver 允许的 mx_upload_filesize 是 300m。我没有使用 imagemagicpolicy.xml?我需要将它与 php pls 建议一起使用吗 你确定upload_max_filesize 300M听起来很多,我的服务器限制是2M。 post_max_size 设置为多少? php.net/manual/en/imagick.coalesceimages.php#Hcom110393 这似乎有你需要的一切 @user3647971 我用了同样的方法。但在我的系统上,每个图像都必须根据来自 foreach 循环的宽度/高度调整为 6 种不同的尺寸。当我尝试上传一个大小为 3mb 的文件时,它要么调整为一种大小,而其他大小不会生成,否则不会生成调整大小的大小 【参考方案1】:$imagick = new Imagick($_FILES['file']['tmp_name']);
foreach ($imageFolders as $imageFolder => $size)
if ($imagick->getImageWidth() > $size['minWidth'])
$width = $size['maxWidth'];
$height = $size['maxWidth'];
else
$width = $imagick->getImageWidth();
$height = $imagick->getImageHeight(
$imagick = $imagick->coalesceImages();
foreach($imagick as $frame)
$frame->thumbnailImage($width , $height );
$frame->setImagePage($width , $height , 0, 0);
$imagick = $imagick->deconstructImages();
$imagick->writeImages($imagePath, true);
$imagick->clear();
$imagick->destroy();
【讨论】:
我尝试过这种方式,我可以调整大小并上传 7mb 图像。但是当我检查调整大小的图像时,其中一些没有完全相同的动画。与原始动画相比,有些动画速度较慢,可能是帧丢失或其他原因。有什么原因或解决方法吗? 也许会提出另一个问题? 很难调试,播放速度或变慢可能有多种原因 例如,它是一个 7mb 的 gif,所以浏览器可能很难缓冲它 是的,我希望如此,因为完成调整大小过程需要一些时间。可能是缓冲时间。你能告诉我任何解决方案吗?以上是关于当文件大小大于 2mb 时,Imagick 无法调整 GIF 图像的大小的主要内容,如果未能解决你的问题,请参考以下文章
当有效载荷长度大小大于 1000K 时,无法获得有效载荷响应。(Coap)