PHP简单实现图片格式转换(jpg转png,gif转png等)


Posted in PHP onOctober 30, 2019

需求

开发过程中总会遇到一些需求需要对图片格式进行转换。比如 gif转png,jpg转png

如最近使用某平台的图片文件识别,居然不支持gif格式,那么就需要将gif处理成png等。

依赖

php扩展 gd 和 exif

实现

/**
 * 图片格式转换
 * @param string $image_path 文件路径或url
 * @param string $to_ext 待转格式,支持png,gif,jpeg,wbmp,webp,xbm
 * @param null|string $save_path 存储路径,null则返回二进制内容,string则返回true|false
 * @return boolean|string $save_path是null则返回二进制内容,是string则返回true|false
 * @throws Exception 
 * @author klinson <klinson@163.com>
 */
function transform_image($image_path, $to_ext = 'png', $save_path = null)
{
  if (! in_array($to_ext, ['png', 'gif', 'jpeg', 'wbmp', 'webp', 'xbm'])) {
    throw new \Exception('unsupport transform image to ' . $to_ext);
  }
  switch (exif_imagetype($image_path)) {
    case IMAGETYPE_GIF :
      $img = imagecreatefromgif($image_path);
      break;
    case IMAGETYPE_JPEG :
    case IMAGETYPE_JPEG2000:
      $img = imagecreatefromjpeg($image_path);
      break;
    case IMAGETYPE_PNG:
      $img = imagecreatefrompng($image_path);
      break;
    case IMAGETYPE_BMP:
    case IMAGETYPE_WBMP:
      $img = imagecreatefromwbmp($image_path);
      break;
    case IMAGETYPE_XBM:
      $img = imagecreatefromxbm($image_path);
      break;
    case IMAGETYPE_WEBP: //(从 PHP 7.1.0 开始支持)
      $img = imagecreatefromwebp($image_path);
      break;
    default :
      throw new \Exception('Invalid image type');
  }
  $function = 'image'.$to_ext;
  if ($save_path) {
    return $function($img, $save_path);
  } else {
    $tmp = __DIR__.'/'.uniqid().'.'.$to_ext;
    if ($function($img, $tmp)) {
      $content = file_get_contents($tmp);
      unlink($tmp);
      return $content;
    } else {
      unlink($tmp);
      throw new \Exception('the file '.$tmp.' can not write');
    }
  }
}

使用

// 转换后保存在test.png
transform_image($url, 'png', './test.png');
transform_image($filepath, 'png', './test.png');
// 转换后二进制结果直接返回
transform_image($url, 'png');
transform_image($filepath, 'png');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php 无限级 SelectTree 类
May 19 PHP
一步一步学习PHP(6) 面向对象
Feb 16 PHP
让PHP开发者事半功倍的十大技巧小结
Apr 20 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
Jan 10 PHP
有关PHP性能优化的介绍
Jun 20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
Jun 23 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
PHP截取指定图片大小的方法
Dec 10 PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 PHP
phpMyAdmin无法登陆的解决方法
Apr 27 PHP
Yii2框架自定义验证规则操作示例
Feb 08 PHP
PHP二维数组分页2种实现方法解析
Jul 09 PHP
thinkPHP框架乐观锁和悲观锁实例分析
Oct 30 #PHP
PHP的HTTP客户端Guzzle简单使用方法分析
Oct 30 #PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 #PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
Oct 30 #PHP
微信小程序发送订阅消息的方法(php 为例)
Oct 30 #PHP
php上传后台无法收到数据解决方法
Oct 28 #PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 #PHP
You might like
SONY ICF-SW7600的电路分析
2021/03/02 无线电
超级实用的7个PHP代码片段分享
2012/01/05 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
jquery map方法使用示例
2014/04/23 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
python删除文件示例分享
2014/01/28 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
想学画画?python满足你!
2020/12/24 Python
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
最新个人职业生涯规划书
2014/01/22 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
生活小常识广播稿
2014/09/16 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
2016继续教育研修日志
2015/11/13 职场文书
前端JavaScript大管家 package.json
2021/11/02 Javascript
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers