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扩展ZF――Validate扩展
Jan 10 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
Dec 06 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
Dec 19 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
PHP中strtotime函数使用方法详解
Nov 27 PHP
解析如何在PHP下载文件名中解决乱码的问题
Jun 20 PHP
下拉列表多级联动dropDownList示例代码
Jun 27 PHP
php仿QQ验证码的实例分析
Jul 01 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
php中运用http调用的GET和POST方法示例
Sep 29 PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 PHP
PHP Callable强制指定回调类型的方法
Aug 30 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
php $_SERVER当前完整url的写法
2009/11/12 PHP
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
js 提交和设置表单的值
2008/12/19 Javascript
jQuery Clone Bug解决代码
2010/12/22 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
javascript中this关键字详解
2016/12/12 Javascript
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
JavaScript实现网页跨年倒计时
2020/12/02 Javascript
python操作MySQL数据库的方法分享
2012/05/29 Python
urllib2自定义opener详解
2014/02/07 Python
python实现ftp客户端示例分享
2014/02/17 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
Python logging设置和logger解析
2019/08/28 Python
Python实现哲学家就餐问题实例代码
2020/11/09 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
中介公司区域经理岗位职责范本
2014/03/02 职场文书
2014年社区工作总结
2014/11/18 职场文书
2014年话务员工作总结
2014/11/19 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
学生评语集锦
2015/01/04 职场文书
房屋认购协议书
2015/01/29 职场文书
酒桌上的开场白
2015/06/01 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL