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 相关文章推荐
支持数组的ADDSLASHES的php函数
Feb 16 PHP
PHP游戏编程25个脚本代码
Feb 08 PHP
PHP操作MongoDB时的整数问题及对策说明
May 02 PHP
用php实现百度网盘图片直链的代码分享
Nov 01 PHP
浅析PHP Socket技术
Aug 02 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
linux下编译安装memcached服务
Aug 03 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
php实现带读写分离功能的MySQL类完整实例
Jul 28 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 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获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
深入PHP curl参数的详解
2013/06/17 PHP
PHP内核探索之变量
2015/12/22 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
PHP中Array相关函数简介
2016/07/03 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
初步讲解Python中的元组概念
2015/05/21 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
Django实现快速分页的方法实例
2017/10/22 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
Pytorch提取模型特征向量保存至csv的例子
2020/01/03 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
新任教师自我鉴定
2014/02/24 职场文书
财务主管岗位职责
2014/02/28 职场文书
空乘英文求职信
2014/04/13 职场文书
赔偿协议书范本
2014/04/15 职场文书
供应链金融服务方案
2014/05/25 职场文书
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS
利用Python脚本写端口扫描器socket,python-nmap
2022/07/23 Python