使用php修改图片的DPI,达到与ps类似的效果
安装好imagick扩展
- 进入扩展官网http://pecl.php.net/package/imagick,对应下载好imagick插件,配置到php中
- 配置扩展到php中,windows文章教程https://www.php.net/manual/zh/install.pecl.windows.php
- liunx教程,看这个https://www.php.net/manual/zh/install.pecl.pear.php
安装好Image Magick软件
- linux下载地址:https://imagemagick.org/archive/binaries/magick
- windows下载地址:https://imagemagick.org/archive/binaries/ImageMagick-7.1.1-11-Q16-HDRI-x64-dll.exe
- 配置好环境变量,方便其他程序进行调用
PHP使用imagick进行分辨率调整demo
- 这里说的分辨率是dpi,一般网路图片dpi为72或者96,不适合打印,适合打印的图片分辨率一般都是254,300,600等,主要看打印的机器,在ps中,我们可以方便的调整,而且能保持一定的图片质量,我们使用imagick也能达到和ps一样额效果
- 示例代码如下
$start = microtime(true);
$dpi = 300;
$im = new Imagick();
$res = $im->readImage('test.png');
// 1. 设置好调整的单位
$im->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
// 简单放大,不可取
//$im->scaleImage(3867, 0, false);
// 2. 将图片重新采样到所需的分辨率,图片会自动放大到对应dpi大小,同时设置图片dpi(效果同ps)
$im->resampleImage($dpi, $dpi, imagick::FILTER_UNDEFINED, 0);
echo "use time " . (microtime(true) - $start).PHP_EOL;
// 很多教程写了这个,这个单独用确实可以修改分辨率,但是图片质量达不到要求,也不会放大图片
// $im->setImageResolution($dpi, $dpi);
$im->writeImage('test300_4.png');
echo "use time " . (microtime(true) - $start);
总结
线上很多教程,感觉都没有讲清楚这个问题,特别记录下来,仅供参考。
软件版本:
windows
php 7.4.3 x64 nts
imagick.dll 3.7.0
ImageMagick-7.1.1-11-Q16-HDRI-x64-dll
发表评论 取消回复