Imagick无法生成1024×768图片及指定目录保存技术咨询
问题解决方案
一、修正输出图片为1024×768
你的代码先执行缩放再做旋转,而旋转操作会交换图片的宽高(比如竖图旋转后变成横图,宽高互换),导致最终尺寸反转成768×1024。正确流程是先完成自动旋转修正方向,再进行缩放,这样缩放会基于旋转后的正确方向执行,得到目标尺寸。
修改后的关键代码顺序:
// 先自动旋转图片,修正方向 autoRotateImage($imagick); // 再缩放到目标尺寸1024×768 $imagick->thumbnailImage(1024, 768);
二、指定目录写入图片
直接在writeImage()方法中传入目标目录的完整路径即可,注意要确保目标目录已经存在(如果不存在,可提前用mkdir()递归创建)。
示例:
// 定义输出目录和文件名 $outputPath = 'C:\xampp\htdocs\compressed_images\20221016_120159_resized.jpg'; // 写入到指定路径 $imagick->writeImage($outputPath);
如果需要自动创建目录,可添加以下代码(放在写入操作前):
$outputDir = 'C:\xampp\htdocs\compressed_images'; if (!is_dir($outputDir)) { mkdir($outputDir, 0777, true); // true表示递归创建多级目录 }
完整修改后的代码
<?php function autoRotateImage($image) { $orientation = $image->getImageOrientation(); switch($orientation) { case imagick::ORIENTATION_BOTTOMRIGHT: $image->rotateimage("#000", 180); // 旋转180度 break; case imagick::ORIENTATION_RIGHTTOP: $image->rotateimage("#000", 90); // 顺时针旋转90度 break; case imagick::ORIENTATION_LEFTBOTTOM: $image->rotateimage("#000", -90); // 逆时针旋转90度 break; } // 修正旋转后的EXIF方向信息 $image->setImageOrientation(imagick::ORIENTATION_TOPLEFT); } $image = 'C:\xampp\htdocs\uncompressed_images\20221016_120159.jpg'; $outputDir = 'C:\xampp\htdocs\compressed_images'; $outputPath = $outputDir . '\20221016_120159_resized.jpg'; // 确保输出目录存在 if (!is_dir($outputDir)) { mkdir($outputDir, 0777, true); } // 创建Imagick对象 $imagick = new Imagick($image); // 设置JPEG压缩参数 $imagick->setImageCompression(imagick::COMPRESSION_JPEG); $imagick->setImageCompressionQuality(26); // 先旋转修正方向,再缩放 autoRotateImage($imagick); $imagick->thumbnailImage(1024, 768); // 设置格式并写入指定目录 $imagick->setFormat('jpg'); $imagick->writeImage($outputPath); // 输出图片到浏览器 header("Content-Type: image/jpg"); echo $imagick->getImageBlob(); ?>
内容的提问来源于stack exchange,提问作者Gandalf
相关产品推荐
相关产品推荐

