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 相关文章推荐
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
PHP脚本的10个技巧(1)
Oct 09 PHP
MySQL授权问题总结
May 06 PHP
深入PHP异步执行的详解
Jun 03 PHP
探讨php中header的用法详解
Jun 07 PHP
在PHP中使用X-SendFile头让文件下载更快
Jun 01 PHP
php异步多线程swoole用法实例
Nov 14 PHP
PHP实现懒加载的方法
Mar 07 PHP
php用户登录之cookie信息安全分析
May 13 PHP
PHP 中魔术常量的实例详解
Oct 26 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 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延迟静态绑定实例分析
2015/02/08 PHP
yii用户注册表单验证实例
2015/12/26 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
2007/03/27 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
微信小程序 实现点击添加移除class
2017/06/12 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
原生JS实现的放大镜特效示例【测试可用】
2018/12/08 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
在python的类中动态添加属性与生成对象
2016/09/17 Python
Python之py2exe打包工具详解
2017/06/14 Python
Python实现购物程序思路及代码
2017/07/24 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
实例讲解Python爬取网页数据
2018/07/08 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
促销活动总结
2014/04/28 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
2014年学生会工作总结
2014/11/07 职场文书
店铺转让协议书
2015/01/29 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书
德生BCL3000抢先使用感受和评价
2022/04/07 无线电
delete in子查询不走索引问题分析
2022/07/07 MySQL