0

0

php通用图片处理类的用法

墨辰丷

墨辰丷

发布时间:2018-06-12 09:39:31

|

2266人浏览过

|

来源于php中文网

原创

这篇文章主要介绍了php实现的通用图片处理类,可实现针对图片的缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色等功能,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了php实现的通用图片处理类。分享给大家供大家参考。具体如下:

该图片处理函数功能:缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色,处理并保存历史记录的思路:当有图片有改动时自动生成一张新图片,命名方式可以考虑在原图片的基础上加上步骤,例如:图片名称+__第几步。 在一些需要图片高级处理功能的Web应用中,可以参考这个类。

'没有找到相关图片!'
  );
/*
构造函数:函数初始化
*/
  function __construct($PICTURE_URL)
  {
    $this->get_info($PICTURE_URL);
  }
  function get_info($PICTURE_URL)
  {
    /*
    处理原图片的信息,先检测图片是否存在,不存在则给出相应的信息
    */
    @$SIZE=getimagesize($PICTURE_URL);
    if(!$SIZE)
    {
      exit($this->ERROR['unalviable']);
    }
    //得到原图片的信息类型、宽度、高度
    $this->PICTURE_MIME=$SIZE['mime'];
    $this->PICTURE_;
    $this->PICTURE_HEIGHT=$SIZE[1];
    //创建图片
    switch($SIZE[2])
    {
      case 1:
        $this->PICTURE_CREATE=imagecreatefromgif($PICTURE_URL);
        $this->PICTURE_TYPE="imagejpeg";
        $this->PICTURE_EXT="jpg";
        break;
      case 2:
        $this->PICTURE_CREATE=imagecreatefromjpeg($PICTURE_URL);
        $this->PICTURE_TYPE="imagegif";
        $this->PICTURE_EXT="gif";
        break;
      case 3:
        $this->PICTURE_CREATE=imagecreatefrompng($PICTURE_URL);
        $this->PICTURE_TYPE="imagepng";
        $this->PICTURE_EXT="png";
        break;
    } 
    /*
    文字颜色转换16进制转换成10进制
    */
    preg_match_all("/([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);
    if(count($MATCHES)==3)
    {
      $this->RED=hexdec($MATCHES[0][0]);
      $this->GREEN=hexdec($MATCHES[0][1]);
      $this->BLUE=hexdec($MATCHES[0][2]);
    }
  }
  //end of __construct
  /*
  将16进制的颜色转换成10进制的(R,G,B)
  */
  function hex2dec()
  {
    preg_match_all("/([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);
    if(count($MATCHES)==3)
    {
      $this->RED=hexdec($MATCHES[0][0]);
      $this->GREEN=hexdec($MATCHES[0][1]);
      $this->BLUE=hexdec($MATCHES[0][2]);
    }
  }
  //缩放类型
  function zoom_type($ZOOM_TYPE)
  {
    $this->ZOOM=$ZOOM_TYPE;
  }
  //对图片进行缩放,如果不指定高度和宽度就进行缩放
  function zoom()
  {
    //缩放的大小
    if($this->ZOOM==0)
    {
      $this->ZOOM_;gt;PICTURE_WIDTH * $this->ZOOM_MULTIPLE;
      $this->ZOOM_HEIGHT=$this->PICTURE_HEIGHT * $this->ZOOM_MULTIPLE;
    }
    //新建一个真彩图象
    $this->TRUE_COLOR=imagecreatetruecolor($this->ZOOM_WIDTH,$this->ZOOM_HEIGHT);
    $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);
    imagefilledrectangle($this->TRUE_COLOR,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$WHITE);
    imagecopyresized($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  }
  //end of zoom
  //裁切图片,按坐标或自动
  function cut()
  {
    $this->TRUE_COLOR=imagecreatetruecolor($this->CUT_WIDTH,$this->CUT_WIDTH);
    imagecopy($this->TRUE_COLOR,$this->PICTURE_CREATE, 0, 0, $this->CUT_X, $this->CUT_Y,$this->CUT_WIDTH,$this->CUT_HEIGHT);
  }
  //end of cut
  /*
  在图片上放文字或图片
  水印文字
  */
  function _mark_text()
  {
    $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
    $this->WORD=mb_convert_encoding($this->FONT_WORD,'utf-8','gb2312');
    /*
    取得使用 TrueType 字体的文本的范围
    */
    $TEMP = imagettfbbox($this->FONT_SIZE,0,$this->FONT_PATH,$this->WORD);
    $WORD_LENGTH=strlen($this->WORD);
    $WORD_WIDTH =$TEMP[2] - $TEMP[6];
    $WORD_HEIGHT =$TEMP[3] - $TEMP[7];
    /*
    文字水印的默认位置为右下角
    */
    if($this->WORD_X=="")
    {
      $this->WORD_X=$this->PICTURE_WIDTH-$WORD_WIDTH;
    }
    if($this->WORD_Y=="")
    {
      $this->WORD_Y=$this->PICTURE_HEIGHT-$WORD_HEIGHT;
    }
    imagesettile($this->TRUE_COLOR,$this->PICTURE_CREATE);
    imagefilledrectangle($this->TRUE_COLOR,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,IMG_COLOR_TILED);
    $TEXT2=imagecolorallocate($this->TRUE_COLOR,$this->RED,$this->GREEN,$this->Blue);
    imagettftext($this->TRUE_COLOR,$this->FONT_SIZE,$this->ANGLE,$this->WORD_X,$this->WORD_Y,$TEXT2,$this->FONT_PATH,$this->WORD);
  }
  /*
  水印图片
  */
function _mark_picture()
{
  /*
  获取水印图片的信息
  */
  @$SIZE=getimagesize($this->FORCE_URL);
  if(!$SIZE)
  {
    exit($this->ERROR['unalviable']);
  }
  $FORCE_PICTURE_;
  $FORCE_PICTURE_HEIGHT=$SIZE[1];
  //创建水印图片
  switch($SIZE[2])
  {
    case 1:
      $FORCE_PICTURE_CREATE=imagecreatefromgif($this->FORCE_URL);
      $FORCE_PICTURE_TYPE="gif";
      break;
    case 2:
      $FORCE_PICTURE_CREATE=imagecreatefromjpeg($this->FORCE_URL);
      $FORCE_PICTURE_TYPE="jpg";
      break;
    case 3:
      $FORCE_PICTURE_CREATE=imagecreatefrompng($this->FORCE_URL);
      $FORCE_PICTURE_TYPE="png";
      break;
  }
/*
  判断水印图片的大小,并生成目标图片的大小,如果水印比图片大,则生成图片大小为水印图片的大小。否则生成的图片大小为原图片大小。
*/
  $this->NEW_PICTURE=$this->PICTURE_CREATE;
  if($FORCE_PICTURE_WIDTH>$this->PICTURE_WIDTH)
  {
    $CREATE_;gt;FORCE_START_X;
  }
  else
  {
    $CREATE_;gt;PICTURE_WIDTH;
  }
  if($FORCE_PICTURE_HEIGHT>$this->PICTURE_HEIGHT)
  {
    $CREATE_HEIGHT=$FORCE_PICTURE_HEIGHT-$this->FORCE_START_Y;
  }
  else
  {
    $CREATE_HEIGHT=$this->PICTURE_HEIGHT;
  }
  /*
  创建一个画布
  */
  $NEW_PICTURE_CREATE=imagecreatetruecolor($CREATE_WIDTH,$CREATE_HEIGHT);
  $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);
  /*
  将背景图拷贝到画布中
  */
  imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  /*
  将目标图片拷贝到背景图片上
  */
  imagecopy($NEW_PICTURE_CREATE, $FORCE_PICTURE_CREATE, $this->FORCE_X, $this->FORCE_Y, $this->FORCE_START_X, $this->FORCE_START_Y,$FORCE_PICTURE_WIDTH,$FORCE_PICTURE_HEIGHT);
  $this->TRUE_COLOR=$NEW_PICTURE_CREATE;
}
//end of mark
function alpha_()
{
  $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  $rgb="#CDCDCD";
  $tran_color="#000000";
  for($j=0;$j<=$this->PICTURE_HEIGHT-1;$j++)
  {
    for ($i=0;$i<=$this->PICTURE_WIDTH-1;$i++)
    {
      $rgb = imagecolorat($this->PICTURE_CREATE,$i,$j);
      $r = ($rgb >> 16) & 0xFF;
      $g = ($rgb >> 8) & 0xFF;
      $b = $rgb & 0xFF;
      $now_color=imagecolorallocate($this->PICTURE_CREATE,$r,$g,$b);
      if ($now_color==$tran_color)
      {
        continue;
      }
      else
      {
        $color=imagecolorallocatealpha($this->PICTURE_CREATE,$r,$g,$b,$ALPHA);
        imagesetpixel($this->PICTURE_CREATE,$ALPHA_X+$i,$ALPHA_Y+$j,$color);
      }
      $this->TRUE_COLOR=$this->PICTURE_CREATE;
    }
  }
}
/*
图片旋转:
沿y轴旋转
*/
function turn_y()
{
  $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  for ($x = 0; $x < $this->PICTURE_WIDTH; $x++)
  {
    imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, $this->PICTURE_WIDTH - $x - 1, 0, $x, 0, 1, $this->PICTURE_HEIGHT);
  }
}
/*
沿X轴旋转
*/
function turn_x()
{
  $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  for ($y = 0; $y < $this->PICTURE_HEIGHT; $y++)
  {
    imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, 0, $this->PICTURE_HEIGHT - $y - 1, 0, $y, $this->PICTURE_WIDTH, 1);
  }
}
/*
任意角度旋转
*/
function turn()
{
  $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  imageCopyResized($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);
  $this->TRUE_COLOR=imagerotate ($this->TRUE_COLOR, $this->CIRCUMROTATE, $WHITE);
}
/*
图片锐化
*/
function sharp()
{
  $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  $cnt=0;
  for ($x=0; $x<$this->PICTURE_WIDTH; $x++)
  {
    for ($y=0; $y<$this->PICTURE_HEIGHT; $y++)
    {
      $src_clr1 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x-1, $y-1));
      $src_clr2 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x, $y));
      $r = intval($src_clr2["red"]+$this->SHARP*($src_clr2["red"]-$src_clr1["red"]));
      $g = intval($src_clr2["green"]+$this->SHARP*($src_clr2["green"]-$src_clr1["green"]));
      $b = intval($src_clr2["blue"]+$this->SHARP*($src_clr2["blue"]-$src_clr1["blue"]));
      $r = min(255, max($r, 0));
      $g = min(255, max($g, 0));
      $b = min(255, max($b, 0));
      if (($DST_CLR=imagecolorexact($this->PICTURE_CREATE, $r, $g, $b))==-1)
        $DST_CLR = imagecolorallocate($this->PICTURE_CREATE, $r, $g, $b);
        $cnt++;
      if ($DST_CLR==-1) die("color allocate faile at $x, $y ($cnt).");
        imagesetpixel($this->TRUE_COLOR, $x, $y, $DST_CLR);
    }
  }
}
/*
  将图片反色处理??
*/
function return_color()
{
  /*
  创建一个画布
  */
  $NEW_PICTURE_CREATE=imagecreate($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);
  /*
  将背景图拷贝到画布中
  */
  imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  $this->TRUE_COLOR=$NEW_PICTURE_CREATE;
}
/*
生成目标图片并显示
*/
function show()
{
  // 判断浏览器,若是IE就不发送头
  if(isset($_SERVER['HTTP_USER_AGENT']))
  {
    $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);
    if(!preg_match('/^.*MSIE.*\)$/i',$ua))
    {
      header("Content-type:$this->PICTURE_MIME");
    }
  }
  $OUT=$this->PICTURE_TYPE;
  $OUT($this->TRUE_COLOR);
}
/*
生成目标图片并保存
*/
function save_picture()
{
  // 以 JPEG 格式将图像输出到浏览器或文件
  $OUT=$this->PICTURE_TYPE;
  if(function_exists($OUT))
  {
    // 判断浏览器,若是IE就不发送头
    if(isset($_SERVER['HTTP_USER_AGENT']))
    {
      $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);
      if(!preg_match('/^.*MSIE.*\)$/i',$ua))
      {
        header("Content-type:$this->PICTURE_MIME");
      }
    }
    if(!$this->TRUE_COLOR)
    {
      exit($this->ERROR['unavilable']);
    }
    else
    {
      $OUT($this->TRUE_COLOR,$this->DEST_URL);
      $OUT($this->TRUE_COLOR);
    }
  }
}
/*
析构函数:释放图片
*/
function __destruct()
{
/*释放图片*/
  imagedestroy($this->TRUE_COLOR);
  imagedestroy($this->PICTURE_CREATE);
}
//end of class
}
?>

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

相关推荐:

立即学习PHP免费学习笔记(深入)”;

动易网上商城管理系统 2006 Sp6 Build 1120 普及版
动易网上商城管理系统 2006 Sp6 Build 1120 普及版

将产品展示、购物管理、资金管理等功能相结合,并提供了简易的操作、丰富的功能和完善的权限管理,为用户提供了一个低成本、高效率的网上商城建设方案包含PowerEasy CMS普及版,主要功能模块:文章频道、下载频道、图片频道、留言频道、采集管理、商城模块、商城日常操作模块500个订单限制(超出限制后只能查看和删除,不能进行其他处理) 无订单处理权限分配功能(只有超级管理员才能处理订单)

下载

php自定义数组变量存放全球各个时区信息

PHP生成指定随机字符串的简单实现方法_php技巧

php数组调用与函数执行的方法

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

2

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

25

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

588

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 10.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号