php对图像的各种处理函数代码小结


Posted in PHP onJuly 08, 2013

一、创建图片资源

imagecreatetruecolor(width,height);
imagecreatefromgif(图片名称);
imagecreatefrompng(图片名称);
imagecreatefromjpeg(图片名称);画出各种图像 imagegif(图片资源,保存路径);
imagepng()
imagejpeg();

二、获取图片属性

imagesx(res//宽度
imagesy(res//高度
getimagesize(文件路径)
返回一个具有四个单元的数组。索引 0 包含图像宽度的像素值,索引 1 包含图像高度的像素值。索引 2 是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。这些标记与 PHP 4.3.0 新加的 IMAGETYPE 常量对应。索引 3 是文本字符串,内容为“height="yyy" width="xxx"”,可直接用于 IMG 标记。
销毁图像资源
imagedestroy(图片资源);

三、透明处理

PNG、jpeg透明色都正常,只有gif不正常

imagecolortransparent(resource image [,int color])//将某个颜色设置成透明色
imagecolorstotal()
imagecolorforindex();

四、图片的裁剪

imagecopyresized()
imagecopyresampled();

五、加水印(文字、图片)

字符串编码转换string iconv ( string $in_charset , string $out_charset , string $str )

六、图片旋转

imagerotate();//制定角度的图片翻转

七、图片的翻转

沿X轴   沿Y轴翻转

八、锐化

imagecolorsforindex()

imagecolorat()

在图片上画图形  $img=imagecreatefromgif("./images/map.gif");

 $red= imagecolorallocate($img, 255, 0, 0);
 imageline($img, 0, 0, 100, 100, $red);
 imageellipse($img, 200, 100, 100, 100, $red);
 imagegif($img, "./images/map2.gif");
 imagedestroy($img);

图片普通缩放

$filename="./images/hee.jpg";
 $per=0.3;
 list($width, $height)=getimagesize($filename);
 $n_w=$width*$per;
 $n_h=$width*$per;
 $new=imagecreatetruecolor($n_w, $n_h);
 $img=imagecreatefromjpeg($filename);
//拷贝部分图像并调整
 imagecopyresized($new, $img,0, 0,0, 0,$n_w, $n_h, $width, $height);
//图像输出新图片、另存为
 imagejpeg($new, "./images/hee2.jpg");
 imagedestroy($new);
 imagedestroy($img);

图片等比例缩放、没处理透明色
function thumn($background, $width, $height, $newfile) {
 list($s_w, $s_h)=getimagesize($background);//获取原图片高度、宽度
 if ($width && ($s_w < $s_h)) {
     $width = ($height / $s_h) * $s_w;
 } else {
     $height = ($width / $s_w) * $s_h;
 }
 $new=imagecreatetruecolor($width, $height);
 $img=imagecreatefromjpeg($background);
 imagecopyresampled($new, $img, 0, 0, 0, 0, $width, $height, $s_w, $s_h);
 imagejpeg($new, $newfile);
 imagedestroy($new);
 imagedestroy($img);
}
thumn("images/hee.jpg", 200, 200, "./images/hee3.jpg");

gif透明色处理
function thumn($background, $width, $height, $newfile) {
 list($s_w, $s_h)=getimagesize($background);
 if ($width && ($s_w < $s_h)) {
     $width = ($height / $s_h) * $s_w;
 } else {
     $height = ($width / $s_w) * $s_h;
 }
 $new=imagecreatetruecolor($width, $height);
 $img=imagecreatefromgif($background);
 $otsc=imagecolortransparent($img);
 if($otsc >=0 && $otst < imagecolorstotal($img)){//判断索引色
  $tran=imagecolorsforindex($img, $otsc);//索引颜色值
  $newt=imagecolorallocate($new, $tran["red"], $tran["green"], $tran["blue"]);
  imagefill($new, 0, 0, $newt);
  imagecolortransparent($new, $newt);
 }
 imagecopyresized($new, $img, 0, 0, 0, 0, $width, $height, $s_w, $s_h);
 imagegif($new, $newfile);
 imagedestroy($new);
 imagedestroy($img);
}
thumn("images/map.gif", 200, 200, "./images/map3.gif");

图片裁剪
function cut($background, $cut_x, $cut_y, $cut_width, $cut_height, $location){
 $back=imagecreatefromjpeg($background);
 $new=imagecreatetruecolor($cut_width, $cut_height);
 imagecopyresampled($new, $back, 0, 0, $cut_x, $cut_y, $cut_width, $cut_height,$cut_width,$cut_height);
 imagejpeg($new, $location);
 imagedestroy($new);
 imagedestroy($back);
}
cut("./images/hee.jpg", 440, 140, 117, 112, "./images/hee5.jpg");

图片加水印

文字水印

function mark_text($background, $text, $x, $y){
  $back=imagecreatefromjpeg($background);
  $color=imagecolorallocate($back, 0, 255, 0);
  imagettftext($back, 20, 0, $x, $y, $color, "simkai.ttf", $text);
  imagejpeg($back, "./images/hee7.jpg");
  imagedestroy($back);
 }
 mark_text("./images/hee.jpg", "细说PHP", 150, 250);
//图片水印
function mark_pic($background, $waterpic, $x, $y){
$back=imagecreatefromjpeg($background);
$water=imagecreatefromgif($waterpic);
$w_w=imagesx($water);
$w_h=imagesy($water);
imagecopy($back, $water, $x, $y, 0, 0, $w_w, $w_h);
imagejpeg($back,"./images/hee8.jpg");
imagedestroy($back);
imagedestroy($water);
}
mark_pic("./images/hee.jpg", "./images/gaolf.gif", 50, 200);

图片旋转

$back=imagecreatefromjpeg("./images/hee.jpg");
 $new=imagerotate($back, 45, 0);
 imagejpeg($new, "./images/hee9.jpg");

图片水平翻转垂直翻转
function turn_y($background, $newfile){
  $back=imagecreatefromjpeg($background);
  $width=imagesx($back);
  $height=imagesy($back);
  $new=imagecreatetruecolor($width, $height);
  for($x=0; $x < $width; $x++){
   imagecopy($new, $back, $width-$x-1, 0, $x, 0, 1, $height);
  }
  imagejpeg($new, $newfile);
  imagedestroy($back);
  imagedestroy($new);
 }
 function turn_x($background, $newfile){
  $back=imagecreatefromjpeg($background);
  $width=imagesx($back);
  $height=imagesy($back);
  $new=imagecreatetruecolor($width, $height);
  for($y=0; $y < $height; $y++){
   imagecopy($new, $back,0, $height-$y-1, 0, $y, $width, 1);
  }
  imagejpeg($new, $newfile);
  imagedestroy($back);
  imagedestroy($new);
 }
 turn_y("./images/hee.jpg", "./images/hee11.jpg");
 turn_x("./images/hee.jpg", "./images/hee12.jpg");

 图片锐化
function sharp($background, $degree, $save){
 $back=imagecreatefromjpeg($background);
 $b_x=imagesx($back);
 $b_y=imagesy($back);
 $dst=imagecreatefromjpeg($background);
 for($i=0; $i<$b_x; $i++){
  for($j=0; $j<$b_y; $j++){
   $b_clr1=imagecolorsforindex($back, imagecolorat($back, $i-1, $j-1));\\前一个像素颜色数组
   $b_clr2=imagecolorsforindex($back, imagecolorat($back, $i, $j));\\取出当前颜色数组
   $r=intval($b_clr2["red"]+$degree*($b_clr2["red"]-$b_clr1["red"]));\\加深
   $g=intval($b_clr2["green"]+$degree*($b_clr2["green"]-$b_clr1["green"]));
   $b=intval($b_clr2["blue"]+$degree*($b_clr2["blue"]-$b_clr1["blue"]));
   $r=min(255, max($r, 0));//限制r范围在0-255之间
   $g=min(255, max($g, 0));
   $b=min(255, max($b, 0));
   if(($d_clr=imagecolorexact($dst, $r, $g, $b))==-1){//等于1不在颜色范围内
    $d_clr=Imagecolorallocate($dst, $r, $g, $b);//创建一个颜色
   }
   imagesetpixel($dst, $i, $j, $d_clr);
  }
 }
 imagejpeg($dst, $save);
 imagedestroy($back);
 imagedestroy($dst);
}
sharp("./images/hee.jpg", 20, "./images/hee13.jpg");
PHP 相关文章推荐
一段php加密解密的代码
Oct 09 PHP
linux系统上支持php的 iconv()函数的方法
Oct 01 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
Jan 14 PHP
php返回字符串中所有单词的方法
Mar 09 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
php多线程并发实现方法
Sep 30 PHP
php获取flash尺寸详细数据的方法
Nov 12 PHP
php 微信开发获取用户信息如何实现
Dec 13 PHP
PHP进程通信基础之信号量与共享内存通信
Feb 19 PHP
简单实现php上传文件功能
Sep 21 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
Oct 30 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 PHP
php/js获取客户端mac地址的实现代码
Jul 08 #PHP
关于PHP语言构造器介绍
Jul 08 #PHP
php5.5新数组函数array_column使用
Jul 08 #PHP
PHP 关于访问控制的和运算符优先级介绍
Jul 08 #PHP
解析将多维数组转换为支持curl提交的一维数组格式
Jul 08 #PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 #PHP
php打开文件fopen函数的使用说明
Jul 05 #PHP
You might like
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
joomla组件开发入门教程
2016/05/04 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
Javascript 对象的解释
2008/11/24 Javascript
javascript 异常处理使用总结
2009/06/21 Javascript
javascript 全角转换实现代码
2009/07/17 Javascript
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
jQuery对象[0]是什么含义?
2010/07/31 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
angular 动态组件类型详解(四种组件类型)
2017/02/22 Javascript
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
js仿360开机效果
2019/12/26 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
使用python3+xlrd解析Excel的实例
2018/05/04 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
Django通过dwebsocket实现websocket的例子
2019/11/15 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
服务中心夜班服务员岗位职责
2013/11/27 职场文书
家长给学校的建议书
2014/05/15 职场文书
数学教研活动总结
2014/07/02 职场文书
好的旅游活动方案
2014/08/19 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL
mysql中int(3)和int(10)的数值范围是否相同
2021/10/16 MySQL