马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
ImageMagick是什么?
ImageMagick是一款功能强大、跨平台的图像处理软件。它可以读取、转换和输出大量的图片格式,支持各种各样的图像处理操作,如调整巨细、旋转、加水印、格式转换等。在PHP中利用ImageMagick,可以让我们在web应用中轻松实现复杂的图像处理功能。
博主的项目用的ImageMagick 6.9.10-68,最新版本是ImageMagick 7.1.1-41,有需要的可以去官网下载利用。
安装ImageMagick
在Linux系统中安装
- sudo apt-get install imagemagick # Ubuntu/Debian
- sudo yum install ImageMagick # CentOS/RHEL
复制代码 验证安装
结果如下图:
PHP扩展
Imagick 扩展
推荐利用 Imagick 扩展,它提供了更高级的接口和性能。在编译 PHP 时,加入 --with-imagick 选项,然后在 php.ini 中启用。
extension=imagick.so
如果你用宝塔搭建的网站,在软件商店中找到网站对应的PHP版本,点开设置->安装扩展->imagemagick,点击安装。如下图:
exec 函数
如果没有安装 Imagick 扩展,也可以通过 exec 函数直接调用 ImageMagick 的命令行工具。
宝塔用户记得在上图禁用函数列表删除exec函数。
示例
exec 函数示例
在 ThinkPHP6 项目中创建一个类,用于封装 ImageMagick 的操作:
- namespace app\common\library;
- class Image
- {
- public function thumb($image, $width, $height, $savePath)
- {
- exec('convert ' . $image . ' -resize ' . $width . 'x' . $height . ' ' . $savePath);
- }
- }
复制代码 在控制器中利用
- namespace app\controller;
- use think\Controller;
- use app\common\library\Image;
- class Index extends Controller
- {
- public function index()
- {
- $image = 'public/uploads/original.jpg';
- $savePath = 'public/uploads/thumb.jpg';
- $width = 200;
- $height = 200;
- $image = new Image();
- $image->thumb($image, $width, $height, $savePath);
- return '缩略图生成成功!';
- }
- }
复制代码 Imagick 扩展示例
- <?php
- use Intervention\Image\ImageManagerStatic as Image;
- class Upload
- {
- // 上传图片
- public function image()
- {
- $file = request()->file($param["file"]);
- //获取上传缓存文件
- $tmp_name = $file->getPathname();
- //文件原名
- $original_name = $file->getOriginalName();
- $file_path = "/images/".date("Ymd"). '/';
- if (!$this->checkPath($file_path)) {
- return $this->error('', "directory {$path} creation failed");
- }
- $new_name = date('Ymdhis', time()).mt_rand(100000, 999999);
- $file_name = $file_path.$new_name;
- //原图保存
- $new_file = $file_name . "." . $extend_name;
- $image = Image::make($tmp_name);
- $width = $image->width();//图片宽
- $height = $image->height();//图片高
- try {
- $image->save($file);
- $data = [
- "pic_path" => $new_file
- "pic_name" => $original_name,
- "file_ext" => $extend_name,
- "pic_spec" => $width . "*" . $height,
- "update_time" => time(),
- ];
- return $this->success($data);
- } catch (\Exception $e) {
- return $this->error('', $e->getMessage());
- }
- }
- // 验证目录是否可写
- public function checkPath($path)
- {
- if (is_dir($path) || mkdirs($path, 0755)) {
- return true;
- }
- return false;
- }
- }
复制代码 踩坑
利用imagick扩展保存GIF格式的图片时,可能会使图片变为静态图,所以发起tp自带的图片上传。
GIF图片压缩:
- \think\facade\Filesystem::disk('public')->putFileAs('', $file_obj, $file_path);
- $command = "convert {$file_path} -coalesce -layers optimize -quality 10 -colors 16 {$file_path}";
- 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企服之家,中国第一个企服评测及商务社交产业平台。 |