PHP中实现图片的锐化

原创 2004年07月06日 15:35:00

  没错,PHP也可以实现图片的锐化、模糊、浮雕等操作。因为PHP作为网页脚本特长不在此,但在对效率要求不高、又不想使用CGI的情况下,让我们来看看该怎样做。
  下面内容已经被收录在CSDN中PHP的FAQ里:
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=188506

<? 
/*======================================================================
  DESIGN BY :  彭国辉
  SITE:       
http://kacarton.yeah.net/
  BLOG:        http://blog.csdn.net/nhconch
  EMAIL:      
kacarton@sohu.com
  文章为作者原创,转载前请先与本人联系,转载请注明文章出处、保留作者信息,谢谢支持!
======================================================================*/

//读取图像的类型 
//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 
function  GetImageType($filename)  {return  (($imginfo=@getimagesize($filename))!=null  ?  $imginfo[2]  :  null);} 
 
//图像锐化 
//$scr_im:图像资源句柄,$degree:锐化度数 
function  Sharp(&$src_im,  &$dst_im,  $degree) 

       $src_x  =  imagesx($src_im); 
       $src_y  =  imagesy($src_im); 
       //$dst_im  =  imagecreate($src_x,  $src_y); 
       //imagecopy($dst_im,  $src_im,  0,  0,  0,  0,  $src_x,  $src_y); 
       $cnt  =  0; 
       for  ($x=1;  $x<$src_x;  $x++) 
               for  ($y=1;  $y<$src_y;  $y++) 
               { 
                       $src_clr1  =  imagecolorsforindex($src_im,  imagecolorat($src_im,  $x-1,  $y-1)); 
                       $src_clr2  =  imagecolorsforindex($src_im,  imagecolorat($src_im,  $x,  $y)); 
                       $r  =  intval($src_clr2["red"]+$degree*($src_clr2["red"]-$src_clr1["red"])); 
                       $g  =  intval($src_clr2["green"]+$degree*($src_clr2["green"]-$src_clr1["green"])); 
                       $b  =  intval($src_clr2["blue"]+$degree*($src_clr2["blue"]-$src_clr1["blue"])); 
                       $r  =  min(255,  max($r,  0)); 
                       $g  =  min(255,  max($g,  0)); 
                       $b  =  min(255,  max($b,  0)); 
                       //echo  "r:$r,  g:$g,  b:$b<br/>"; 
                       if  (($dst_clr=imagecolorexact($dst_im,  $r,  $g,  $b))==-1) 
                               $dst_clr  =  Imagecolorallocate($dst_im,  $r,  $g,  $b); 
                       $cnt++; 
                       if  ($dst_clr==-1)  die("color  allocate  faile  at  $x,  $y  ($cnt)."); 
                       imagesetpixel($dst_im,  $x,  $y,  $dst_clr); 
               } 
       return  $dst_im; 

 
$ImageFunctions  =  array("imagecreatefromwbmp",  "imagecreatefromgif",  "imagecreatefromjpeg",  "imagecreatefrompng"); 
 
if  (!empty($_POST["ImageName"])) 

       set_time_limit(10*60); 
       if  (($ImageType=GetImageType($_POST["ImageName"]))==false) 
               die("指定文件不存在或不是有效的图片或不支持类型!"); 
       if  ($ImageType==6)  $ImageType  =  0; 
       if  ($ImageType>3)  die("不支持的图片类型!"); 
       $im1  =  $ImageFunctions[$ImageType]($_POST["ImageName"]); 
       $im2  =  $ImageFunctions[$ImageType]($_POST["ImageName"]); 
       //print_r(imagecolorsforindex($im,  imagecolorat($im,  10,  10))); 
       Sharp($im1,  $im2,  $_POST["Degree"]); 
       header("Content-type:  image/png"); 
       imagepng($im2); 
       imagedestroy($im1); 
       imagedestroy($im2); 

 
?> 
<form  name="FormName"  action=""  method="post"> 
请输入图片的本地路径或
URL:<br/
<input  name="ImageName"  type="text"  value="<?=$_POST["ImageName"]?>"  size=32><br/> 
锐化度数(例:0.6、3.0):<br/> 
<input  name="Degree"  type="text"  value="<?=$_POST["Degree"]?>"><br/> 
<input  type="submit"  value="提交"> 
</form> 
 
--------------------------------------------------------------- 
 
改了一下,省了一个$im: 
function  Sharp2(&$im,  $degree) 

       $cnt  =  0; 
       for  ($x=imagesx($im)-1;  $x>0;  $x--) 
               for  ($y=imagesy($im)-1;  $y>0;  $y--) 
               { 
                       $clr1  =  imagecolorsforindex($im,  imagecolorat($im,  $x-1,  $y-1)); 
                       $clr2  =  imagecolorsforindex($im,  imagecolorat($im,  $x,  $y)); 
                       $r  =  intval($clr2["red"]+$degree*($clr2["red"]-$clr1["red"])); 
                       $g  =  intval($clr2["green"]+$degree*($clr2["green"]-$clr1["green"])); 
                       $b  =  intval($clr2["blue"]+$degree*($clr2["blue"]-$clr1["blue"])); 
                       $r  =  min(255,  max($r,  0)); 
                       $g  =  min(255,  max($g,  0)); 
                       $b  =  min(255,  max($b,  0)); 
                       //echo  "r:$r,  g:$g,  b:$b<br>"; 
                       if  (($new_clr=imagecolorexact($im,  $r,  $g,  $b))==-1) 
                               $new_clr  =  Imagecolorallocate($im,  $r,  $g,  $b); 
                       $cnt++; 
                       if  ($new_clr==-1)  die("color  allocate  faile  at  $x,  $y  ($cnt)."); 
                       imagesetpixel($im,  $x,  $y,  $new_clr); 
               } 

OpenCV实现图片锐化

纯粹阅读,请移步OpenCV实现图片锐化效果图源码KqwOpenCVBlurDemo锐化也可以看作是一种线性滤波操作,并且锚点像素有较高的权重,而周围的像素权重较低。 因此,我们可以自定义一个这样的...
  • q4878802
  • q4878802
  • 2016年08月18日 17:07
  • 2123

C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)

C#图像处理 (各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)   一、各种旋转、改变大小 注意:先要添加画图相关的using引用。 //向右旋转图像90°代码如下: privat...
  • qq_16542775
  • qq_16542775
  • 2016年07月08日 16:44
  • 1774

Java 图像的模糊与锐化

import java.awt.*; import java.awt.event.*; import java.awt.image.*; import javax.swing.*; import ja...
  • sunboyiris
  • sunboyiris
  • 2014年03月12日 18:06
  • 2531

php图片处理代码分享,包括缩放、剪裁、缩放、翻转、旋转、透明、锐化等

php图片处理代码分享,包括缩放、剪裁、缩放、翻转、旋转、透明、锐化等。需要的朋友可以参考下 一、创建图片资源 imagecreatetruecolor(width,height); image...
  • xiaoxuan2015
  • xiaoxuan2015
  • 2016年08月26日 10:38
  • 1613

强大的PHP 图片处理类(水印、透明度、缩放、锐化、旋转、翻转、剪切、反色)

  • woaixhq
  • woaixhq
  • 2014年01月09日 17:32
  • 3570

PHP 做图片锐化处理

使用PHP做图像锐化处理
  • w_yunlong
  • w_yunlong
  • 2015年12月29日 11:55
  • 2036

图片锐化程序

  • 2012年04月24日 22:32
  • 283KB
  • 下载

图片淡入淡出、锐化、灰度处理

  • 2009年09月14日 16:58
  • 1.12MB
  • 下载

php图像处理函数大全(缩放、剪裁、缩放、翻转、旋转、透明、锐化的实例)

一、创建图片资源 imagecreatetruecolor(width,height); imagecreatefromgif(图片名称); imagecreatefrompng(图片名称); ...
  • xmlife
  • xmlife
  • 2015年05月30日 22:53
  • 477

android图片特效处理之锐化效果

这篇将讲到图片特效处理的锐化效果。跟前面一样是对像素点进行处理,算法是通用的。 算法原理: 一、简单算法:分别获取当前像素点和八个周围像素点的RGB值,先求出当前像素点的RGB值与八个...
  • ollins136
  • ollins136
  • 2013年11月19日 11:28
  • 682
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP中实现图片的锐化
举报原因:
原因补充:

(最多只允许输入30个字)