使用干预将图像的DPI从72更改为300

时间:2016-11-10 13:57:30

标签: php laravel

我正在使用laravel并使用in进行图像处理。 我想增加图像的DPI。我没有看到任何有关DPI here的文档。 php或其他任何与phplaravel相关的方法是否有任何解决方案?

2 个答案:

答案 0 :(得分:4)

干预图像不支持此功能,但您可以使用-unit PixelsPerInch选项使用imagemagick更改DPI。例如:

exec('convert -units PixelsPerInch originalImage -resample 300 outputIamge'); 

答案 1 :(得分:3)

我只需要解决这个问题,这就是我提出的解决方案。首先,我必须安装Imagick。我在运行Apache,PHP 7.1和Laravel的本地mac上使用的一般过程如下。

使用终端,安装Imagemagick ghostscript依赖

brew update
brew install ghostscript

安装ImageMagick

brew install imagemagick

安装Imagick php扩展程序(仅当你还没有它时才需要pkg-config。终端会告诉你它是否丢失)。

brew install pkg-config
pecl install imagick

通过在php.ini文件的底部添加以下行来激活imagick php扩展。我不得不使用phpinfo()来确定我的位置。

extension=imagick.so

对于PHP 7.1,我还必须安装以下内容。否则,Imagick会在终端运行良好,但不会在php中找到Imagick。

brew install php71-imagick

然后重启apache

sudo brew services restart php71

一旦完成,你应该善于使用Imagick。从那里你可以改变干预的驱动程序使用Imagick而不是GD。 See Intervention Docs

$manager = new ImageManager(array('driver' => 'imagick'));

或者如果你在Laravel,你可以更新config / image.php并更改你的驱动程序。

'driver' => 'imagick'

现在通过干预,您可以为图像做所需的一切。

$image = Image::make( 'some/image.jpg' );
$image->resize( $width, $height, function ($constraint) {
     $constraint->aspectRatio();
 })->stream('jpg');

最后,您可以从干预中获取Imagick对象并更改dpi。

$finalImage = $image->getCore(); //get Imagick object
$finalImage->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
$finalImage->setImageResolution(300,300);

修改

我遇到了一个问题,如果我用终端播种我的数据库并自动创建缩略图,我收到"ImageMagick module not available with this PHP installation."错误。结果我的浏览器使用的是PHP 7.1,我的终端是5.something。所以我必须做以下事情:

在终端中运行此命令以找到它正在使用的php.ini。

php -i | grep php.ini

像以前一样激活该文件中的imagick扩展名。

extension=imagick.so

应该这样做。另一个选择是让终端使用与你的apache相同的php版本。如果您愿意这样做,我会四处寻找方向......其中有一堆漂浮在周围。