You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ImageMagick将PDF转JPG并设置固定宽度

解决ImageMagick转PDF为图片时固定宽度、高度自动适配的问题

没问题!你遇到的小图问题,主要是因为Imagick默认读取PDF的分辨率只有72DPI,再加上没做缩放处理导致的。要实现固定宽度+高度按比例自动适配,只需要在读取PDF后加上缩放逻辑就可以了,下面是修改后的完整代码和关键说明:

修改后的代码

// 创建Imagick对象
$imagick = new Imagick();

// 核心第一步:提高PDF读取分辨率(必须在readImage前调用)
// 300DPI是印刷级清晰度,可根据需求调整为150/200等
$imagick->setResolution(300, 300);

// 从PDF读取所有页面
$imagick->readImage('book.pdf');

// 遍历每一页,设置固定宽度并自动适配高度
foreach ($imagick as $page) {
    // 固定宽度为800px,高度传0表示按原比例自动计算
    // Imagick::FILTER_LANCZOS是高质量缩放滤镜,保证边缘平滑
    $page->resizeImage(800, 0, Imagick::FILTER_LANCZOS, 1);
}

// 写入图片集:false表示生成多张(如converted-0.jpg、converted-1.jpg...)
$imagick->writeImages('converted.jpg', false);

// 释放资源,避免内存泄漏
$imagick->destroy();

关键细节说明

  • 设置分辨率必须提前:setResolution()一定要放在readImage()之前,否则不会生效。默认72DPI的分辨率会导致提取的原始图像很小,就算后期缩放也会模糊,所以先提高基础分辨率是关键。
  • 自动适配高度的技巧:在resizeImage()或scaleImage()中把高度设为0,Imagick会自动根据原图像的宽高比计算对应的高度,完全不用手动计算比例。
  • 可选的简化写法:如果不需要对单页做额外处理,也可以直接用scaleImage()代替遍历,效果一样:
    $imagick->scaleImage(800, 0);
    
  • 调整宽度数值:你可以把800改成任何你需要的固定宽度(比如1024、1200等),高度都会自动适配。

内容的提问来源于stack exchange,提问作者fightstarr20

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:35:51