我正在使用laravel
并使用in
进行图像处理。
我想增加图像的DPI。我没有看到任何有关DPI here的文档。 php
或其他任何与php
或laravel
相关的方法是否有任何解决方案?
答案 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版本。如果您愿意这样做,我会四处寻找方向......其中有一堆漂浮在周围。