PHP 应用 ImageMagick

打印 上一主题 下一主题

主题 1019|帖子 1019|积分 3057

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
ImageMagick是什么?

ImageMagick是一款功能强大、跨平台的图像处理软件。它可以读取、转换和输出大量的图片格式,支持各种各样的图像处理操作,如调整巨细、旋转、加水印、格式转换等。在PHP中利用ImageMagick,可以让我们在web应用中轻松实现复杂的图像处理功能。
博主的项目用的ImageMagick 6.9.10-68,最新版本是ImageMagick 7.1.1-41,有需要的可以去官网下载利用。
安装ImageMagick

在Linux系统中安装

  1. sudo apt-get install imagemagick  # Ubuntu/Debian
  2. sudo yum install ImageMagick  # CentOS/RHEL
复制代码
验证安装

  1. convert --version
复制代码
结果如下图:

PHP扩展

Imagick 扩展

 推荐利用 Imagick 扩展,它提供了更高级的接口和性能。在编译 PHP 时,加入 --with-imagick 选项,然后在 php.ini 中启用。
   extension=imagick.so
  如果你用宝塔搭建的网站,在软件商店中找到网站对应的PHP版本,点开设置->安装扩展->imagemagick,点击安装。如下图:

exec 函数

如果没有安装 Imagick 扩展,也可以通过 exec 函数直接调用 ImageMagick 的命令行工具。
宝塔用户记得在上图禁用函数列表删除exec函数。
示例

exec 函数示例

在 ThinkPHP6 项目中创建一个类,用于封装 ImageMagick 的操作:
  1. namespace app\common\library;
  2. class Image
  3. {
  4.     public function thumb($image, $width, $height, $savePath)
  5.     {
  6.         exec('convert ' . $image . ' -resize ' . $width . 'x' . $height . ' ' . $savePath);
  7.     }
  8. }
复制代码
在控制器中利用
  1. namespace app\controller;
  2. use think\Controller;
  3. use app\common\library\Image;
  4. class Index extends Controller
  5. {
  6.     public function index()
  7.     {
  8.         $image = 'public/uploads/original.jpg';
  9.         $savePath = 'public/uploads/thumb.jpg';
  10.         $width = 200;
  11.         $height = 200;
  12.         $image = new Image();
  13.         $image->thumb($image, $width, $height, $savePath);
  14.         return '缩略图生成成功!';
  15.     }
  16. }
复制代码
Imagick 扩展示例

  1. <?php
  2. use Intervention\Image\ImageManagerStatic as Image;
  3. class Upload
  4. {
  5.     // 上传图片
  6.     public function image()
  7.     {
  8.         $file = request()->file($param["file"]);
  9.         //获取上传缓存文件
  10.         $tmp_name = $file->getPathname();
  11.         //文件原名
  12.         $original_name = $file->getOriginalName();
  13.         $file_path = "/images/".date("Ymd"). '/';
  14.         if (!$this->checkPath($file_path)) {
  15.             return $this->error('', "directory {$path} creation failed");
  16.         }
  17.         $new_name = date('Ymdhis', time()).mt_rand(100000, 999999);
  18.         $file_name = $file_path.$new_name;
  19.         //原图保存
  20.         $new_file = $file_name . "." . $extend_name;
  21.         $image = Image::make($tmp_name);
  22.         $width = $image->width();//图片宽
  23.         $height = $image->height();//图片高
  24.         try {
  25.             $image->save($file);
  26.             $data = [
  27.                 "pic_path" => $new_file
  28.                 "pic_name" => $original_name,
  29.                 "file_ext" => $extend_name,
  30.                 "pic_spec" => $width . "*" . $height,
  31.                 "update_time" => time(),
  32.             ];
  33.             return $this->success($data);
  34.         } catch (\Exception $e) {
  35.             return $this->error('', $e->getMessage());
  36.         }
  37.     }
  38.     // 验证目录是否可写
  39.     public function checkPath($path)
  40.     {
  41.         if (is_dir($path) || mkdirs($path, 0755)) {
  42.             return true;
  43.         }
  44.         return false;
  45.     }
  46. }
复制代码
 踩坑

利用imagick扩展保存GIF格式的图片时,可能会使图片变为静态图,所以发起tp自带的图片上传。
GIF图片压缩:
  1. \think\facade\Filesystem::disk('public')->putFileAs('', $file_obj, $file_path);
  2. $command = "convert {$file_path} -coalesce -layers optimize -quality 10 -colors 16 {$file_path}";
  3. exec($command, $output,$returnVar);
复制代码


  • -coalesce:将动画分解为帧,确保动画信息完整。
  • -layers Optimize:优化图层,但保留动画信息。 
  • -colors:淘汰颜色数,但过少会影响图像质量
  • -quality 80: 设置输出图片的质量,数值越小,压缩率越高
提示

Imagick 扩展 是利用 ImageMagick 的首选方式,它提供了更高级的接口和更好的性能。
安全 是第一位的,在利用 exec 函数时肯定要注意参数过滤。
性能优化 对于大批量图片处理非常重要,可以思量利用异步任务或分布式处理。
总结

通过将 ImageMagick 集成到 ThinkPHP6 项目中,可以轻松实现各种图像处理功能,为你的应用增添更多的可能性。无论是生成缩略图、添加水印,还是举行复杂的图像处理,ImageMagick 都能提供强大的支持。
ImageMagick 官方文档:https://imagemagick.org/ 
Imagick 扩展文档:https://www.php.net/manual/en/book.imagick.php 
ThinkPHP6 官方文档:https://www.thinkphp.cn/

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

玛卡巴卡的卡巴卡玛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表