首页 后端开发 php教程 PHP图像处理类库及演示分享_PHP

PHP图像处理类库及演示分享_PHP

May 29, 2016 am 11:52 AM
php图像处理

简单写了一个PHP的图像处理类库,虽然功能比较少,但是目前也没用到太高级的,以后用到了再填吧,或者哪位给点建议加上什么功能,或者有什么需求可以跟我说,我有时间加上,如果哪位对这个类库进行了扩展的话,还麻烦拿出来大家分享一下,代码现在是能用就行,考虑的东西不是很多,有什么更好的建议请告诉我,谢谢

Img.php

<&#63;php
/**
 * Created by PhpStorm.
 * User: MCtion
 * Date: 2015/5/14 0014
 * Time: 15:36
 * 简单的图像类库,本类中所有相对路径均基于网站根目录,如需修改,则修改常量__WEBROOT__即可
 * 功能:指定文字内容创建图片(不支持中文)、创建验证码图片、创建缩略图、其他功能待续
 * 方法:
 *   Style(array $Options) 设置图片样式,每次设定前将重置为默认样式
 *   Create_Img_Png() 创建PNG图像,相关属性由Style指定
 *   Create_Img_Jpeg() 创建JPEG图像,相关属性由Style指定
 *   Create_Verify() 创建验证码图像,相关属性由Style指定
 *   Get_Verify() 获得创建的验证码值,MD5加密
 *   Load_Img(string $FilePath) 加载图像,创建图像源,供其他方法调用源,FilePath为图像相对路径
 *   Create_Thumb(string $FileName,string $FilePath) 创建由Load_Img()加载的图像的缩略图,FileName为保存后的图像前缀,FilePath为保存图像的相对路径,不包含文件名(例:/Uploads/images/Thumb/)
 */
 
if(!defined("__WEBROOT__")) define("__WEBROOT__",$_SERVER['DOCUMENT_ROOT']);
 
class Img {
  protected $_Img; //图片源
  protected $_FileImg; //加载的图片源
  protected $_FileInfo; //加载的图片的信息数组
  protected $_PicInfo; //加载的图片的宽高等信息数组
  protected $_Rand = 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ1234567890'; //随机因子
  protected $_Code = ''; //验证码
  public $Width = 300;//图片默认宽
  public $Height = 80; //图片默认高
  public $BackgroundColor = "000000";
  public $Font = "/phps/Public/Font/ARIALNB.TTF"; //默认字体
  public $FontSize = 16; //默认字体字号
  public $FontColor = "ffffff"; //默认字体颜色
  public $Content = "Test Word";
  public $Align = "left";
  public $Codes = 4; //验证码个数
  public $Line = 6; //干扰线条的个数
  public $LoadErr = ''; //错误信息
 
  //public function __construct(){}
 
  /** 设置图片属性
   * @param array $Options 属性数组
   * @return $this 返回对象
   */
  public function Style($Options){
    $this -> _Re_Set();
    foreach($Options as $K=>$V){
      if(in_array($K,array('Width','Height','BackgroundColor','Font','FontSize','FontColor','Content','Align','Codes','Line','Snow'))){
        if($K == "BackgroundColor" || $K == "FontColor"){
          if(preg_match("#([a-zA-Z0-9]{6})#",$V)) $this -> $K = $V;
        }else{
          $this -> $K = $V;
        }
      }
    }
    return $this;
  }
 
  /**
   * 重置属性,不提供外部访问
   */
  protected function _Re_Set(){
    $this -> Width = 100;
    $this -> Height = 30;
    $this -> BackgroundColor = "000000";
    $this -> Font = "/phps/Public/Font/ARIALNB.TTF";
    $this -> FontSize = 16;
    $this -> FontColor = "ffffff";
    $this -> Align = "left";
    $this -> Codes =4;
    $this -> Line = 6;
  }
 
  /**
   * 创建图像源、添加背景、创建图像
   * @param bool $BGC 指定是否创建背景色及矩形块
   */
  protected function _Create_Img_GB($BGC = True){
    $this -> _Img = imagecreatetruecolor($this -> Width,$this -> Height); //创建背景源
    if($BGC){
      preg_match("#([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})#",$this -> BackgroundColor,$ColorArr); //将颜色值分隔成三组16位进制数
      $Color = imagecolorallocate($this -> _Img,hexdec($ColorArr[1]),hexdec($ColorArr[2]),hexdec($ColorArr[3])); //给Img图像源添加背景色
      imagefilledrectangle($this -> _Img,0,$this -> Height,$this -> Width,0,$Color); //创建图像
    }
  }
 
  /**
   * 创建随机验证码
   */
  protected function _Create_Code(){
    $Len = strlen($this -> _Rand) - 1;
    for($i = 0;$i < $this -> Codes;$i++){
      $this -> _Code .= $this -> _Rand[mt_rand(0,$Len)];
    }
  }
 
  /**
   * 向图像中写入字符串,暂不支持中文
   */
  protected function _Write_Text(){
    $FontWidth = imagefontwidth($this -> FontSize); //获取字号的一个字符的宽度
    preg_match_all('/(.)/us', $this -> Content, $TextArr); //将内容分隔成数组一遍统计个数
    $FontHeight = imagefontheight($this -> FontSize); //获取字号的高度
    $X = ceil(($this -> Width - ($FontWidth * count($TextArr[0]))) / 2); //设置X轴距左边距的距离
    $Y = ceil(($this -> Height + $FontHeight) / 2); //设置Y轴距上边距的距离
    preg_match("#([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})#",$this -> FontColor,$ColorArr);
    $Color = imagecolorallocate($this -> _Img,hexdec($ColorArr[1]),hexdec($ColorArr[2]),hexdec($ColorArr[3])); //设置文字颜色
    imagettftext($this -> _Img,$this -> FontSize,0,$X,$Y,$Color,__WEBROOT__.$this -> Font,$this -> Content); //写入内容
  }
 
  /**
   * 向图像中写入验证码
   */
  protected function _Write_Code(){
    $_X = $this -> Width / $this -> Codes; //设置宽高比
    for($i = 0;$i < $this -> Codes;$i++){ //循环Codes次,每次生成一位验证码值
      $Color = imagecolorallocate($this -> _Img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); //随机生成验证码值的颜色
      imagettftext($this -> _Img,$this -> FontSize,mt_rand(-30,30),$_X*$i+mt_rand(1,5),$this -> Height / 1.3,$Color,__WEBROOT__.$this -> Font,$this -> _Code[$i]); //生成一位验证码值
    }
  }
 
  /**
   * 向图像中写入干扰线条
   */
  protected function _Write_Line() { //生成干扰线条
    for ($i=0;$i < $this -> Line;$i++) {
      $Color = imagecolorallocate($this -> _Img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
      imageline($this -> _Img,mt_rand(0,$this -> Width),mt_rand(0,$this -> Height),mt_rand(0,$this -> Width),mt_rand(0,$this -> Height),$Color);
    }
  }
 
  /**
   * 设置图像类型为JPEG
   */
  protected function _Img_Jpeg(){
    header('Content-type:image/jpeg');
    imagejpeg($this -> _Img);
    imagedestroy($this -> _Img);
  }
 
  /**
   * 设置图像类型为PNG
   */
  protected function _Img_Png(){
    header('Content-type:image/png');
    imagepng($this -> _Img);
    imagedestroy($this -> _Img);
  }
 
  /**
   * 创建JPEG的字符串图像
   */
  public function Create_Img_Jpg(){
    $this -> _Create_Img_GB(True);
    $this -> _Write_Text();
    $this -> _Img_Jpeg();
  }
 
  /**
   * 创建PNG的字符串图像
   */
  public function Create_Img_Png(){
    $this -> _Create_Img_GB(True);
    $this -> _Write_Text();
    $this -> _Img_Png();
  }
 
  /**
   * 创建验证码的PNG图像
   */
  public function Create_Verify(){
    $this -> BackgroundColor = '';
    for($I = 0;$I < 3;$I++){
      $this -> BackgroundColor .= dechex(mt_rand(20,155));
    }
    $this -> _Create_Img_GB(True);
    $this -> _Create_Code();
    $this -> _Write_Line();
    $this -> _Write_Code();
    $this -> _Img_Png();
  }
 
  /**
   * 外部获取MD5加密后的验证码
   * @return string
   */
  public function Get_Verify(){
    return md5($this -> _Code);
  }
 
  /**
   * 加载一个图像文件,并获取图像相关信息
   * @param string $FilePath 图像相对路径地址
   * @return $this|bool 成功返回对象,否则返回FALSE
   */
  public function Load_Img($FilePath){
    $FilePath = __WEBROOT__.$FilePath;
    if(!is_file($FilePath)){
      $this -> LoadErr = "路径错误,文件不存在";
      Return False;
    }
    $this -> _PicInfo = getimagesize($FilePath);
    $this -> _FileInfo = pathinfo($FilePath);
    switch($this -> _PicInfo[2]){
      case 1:$this ->_FileImg = imagecreatefromgif($FilePath);break;
      case 2:$this ->_FileImg = imagecreatefromjpeg($FilePath);break;
      case 3:$this ->_FileImg = imagecreatefrompng($FilePath);break;
      default:$this -> LoadErr = "类型错误,不支持的图片类型";Return False;
    }
    Return True;
  }
 
  /**
   * 创建缩略图
   * @param string $FileName 保存的图片名称前缀
   * @param string $FilePath 保存图片的相对路径
   * @return mixed 返回生成的图片的信息数组
   */
  public function Create_Thumb($FileName,$FilePath){
    $SavePath = __WEBROOT__.$FilePath;
    if(!file_exists($SavePath)){
      mkdir($SavePath,0777,true);
    }
    $FileName = $FileName.date("YmdHis").rand(100,999).'.'.$this -> _FileInfo['extension'];
    $FilePath = $FilePath.$FileName;
    $SavePath = $SavePath.$FileName;
    $this -> _Create_Img_GB(False);
    imagecopyresampled($this -> _Img,$this -> _FileImg,0,0,0,0,$this -> Width,$this -> Height,$this -> _PicInfo[0],$this -> _PicInfo[1]);
    switch($this -> _PicInfo[2]){
      case 1:imagegif($this -> _Img,$SavePath);break;
      case 2:imagejpeg($this -> _Img,$SavePath);break;
      case 3:imagepng($this -> _Img,$SavePath);break;
    }
    $FIleInfo['FileName'] = $FileName;
    $FIleInfo['FilePath'] = $FilePath;
    Return $FIleInfo;
  }
}

登录后复制

使用示例

$Img = new Img();
 
$Options['Width'] = 300;
$Options['Height'] = 100;
$Options['Content'] = "Test Create Img";
$Options['FontColor'] = "FF0000";
$Options['BackgroundColor'] = "AAAAAA";
$Img -> Style($Options) -> Create_Img_Jpg();
 
if($Img -> Load_Img("/Public/images/ad1.png")){
  $FileInfo = $Img -> Style(array('Width'=>30,'Height'=>30)) -> Create_Thumb("Thumb","/Uploads/images/");
  var_dump($FileInfo);
}else{
  die("加载图像失败,".$Img -> LoadErr);
}
登录后复制

以上所述就是本文的全部内容了,希望大家能够喜欢。

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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP图片滤镜效果实现方法 PHP图片滤镜效果实现方法 Sep 13, 2023 am 11:31 AM

PHP图片滤镜效果实现方法,需要具体代码示例引言:在网页开发过程中,经常需要使用图片滤镜效果来增强图片的鲜艳度和视觉效果。PHP语言提供了一系列函数和方法来实现各种图片滤镜效果,本文将介绍一些常用的图片滤镜效果以及它们的实现方法,并提供具体的代码示例。一、亮度调整亮度调整是一种常见的图片滤镜效果,它可以改变图片的明暗程度。PHP中通过使用imagefilte

如何在PHP7.0中进行图像处理? 如何在PHP7.0中进行图像处理? May 27, 2023 am 08:51 AM

PHP是一种广泛应用于Web开发的编程语言,它具有可读性强、易于学习等特点,在图像处理领域也有很高的应用价值。从PHP5.5到PHP7.0的升级,PHP在图像处理方面进行了一系列的优化和改进,其中包括了更高效的内存管理,更快的执行速度,更丰富的图像处理函数等。本文将详细介绍如何在PHP7.0中进行图像处理。一、GD库图像处理是Web开发中必不可少的一部分,

PHP画一个椭圆 PHP画一个椭圆 Mar 21, 2024 pm 01:00 PM

这篇文章将为大家详细讲解有关PHP画一个椭圆,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP画椭圆前言php语言提供了丰富的函数库,其中GD库专门用于图像处理,可以在PHP中绘制各种形状,包括椭圆。绘制椭圆1.加载GD库2.创建图像

PHP图像处理方法及常见问题详解 PHP图像处理方法及常见问题详解 Jun 09, 2023 am 08:19 AM

PHP是一种非常流行的服务器端脚本语言,可以处理各种各样的Web任务,其中包括图像处理。本文将介绍PHP中的一些图像处理方法以及可能遇到的一些常见问题。一、在PHP中处理图像的方式1.使用GD库GD(GNU图像处理库)是一种用于图像处理的开放源码库。它允许PHP开发人员在脚本中使用图像来创建和操作,包括缩放、剪裁、旋转、过滤和绘制等。在使用GD库之前,需要确

PHP图片裁剪技巧汇总 PHP图片裁剪技巧汇总 Sep 13, 2023 am 08:45 AM

PHP图片裁剪技巧汇总,需要具体代码示例在网页开发中,经常会涉及到对图片进行裁剪的需求。无论是为了适应不同的布局需求,还是为了提高页面加载速度,图片裁剪都是一个非常重要的技术。而PHP作为一种流行的服务器端脚本语言,提供了丰富的图像处理函数和库,使得图片裁剪变得更加简单高效。本文将介绍一些常用的PHP图片裁剪技巧,并提供具体的代码示例。一、GD库裁剪图片GD

PHP中的图像特效及其实现方法 PHP中的图像特效及其实现方法 Jun 22, 2023 pm 12:56 PM

在网站开发中,图像特效可以增加页面的美观度,吸引用户的注意力,为用户提供更良好的体验。而PHP作为一种强大的后端语言,也提供了许多实现图像特效的方法。本文将介绍PHP中常用的图像特效及其实现方法。缩放图像缩放图像是实现网站响应式设计的常用方法之一。PHP中提供了imagecopyresampled()函数来完成缩放图像的操作。该函数的原型如下:boolim

PHP编程中有哪些常见的图像处理操作? PHP编程中有哪些常见的图像处理操作? Jun 12, 2023 am 09:07 AM

在PHP编程中,图像处理是一个非常重要的话题。随着Web应用的发展,越来越多的网站需要使用图像来吸引用户的注意力。因此,对于PHP开发人员来说,掌握一些常见的图像处理操作是非常重要的。本文将介绍一些常见的图像处理操作,供PHP开发人员参考。一、图片缩放图片缩放是图像处理中最常见的操作之一。PHP提供了两种方法来缩放图片:ImageCopyResample()

如何使用PHP的图像处理和生成验证码? 如何使用PHP的图像处理和生成验证码? Jun 29, 2023 am 10:39 AM

如何使用PHP的图像处理和生成验证码?随着互联网的发展,验证码已经成为了确保用户真实性的重要手段之一。通过验证码,可以有效地防止机器人、恶意程序和滥用行为的出现。在PHP中,我们可以使用图像处理技术来生成验证码,从而确保系统的安全性和可靠性。本文将向您介绍如何使用PHP的图像处理和生成验证码。首先,我们需要了解一下图像处理的基本原理。图像处理是对图像进行各种

See all articles