PHP中实现图片的锐化


Posted in PHP onOctober 09, 2006

<?

//读取图像的类型

//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);

}

}


PHP 相关文章推荐
一些PHP写的小东西
Dec 06 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
PHP中for与foreach的区别分析
Mar 09 PHP
用PHP编写和读取XML的几种方式
Jan 12 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
php判断手机访问还是电脑访问示例分享
Jan 20 PHP
以文件形式缓存php变量的方法
Jun 26 PHP
php随机获取金山词霸每日一句的方法
Jul 09 PHP
PHP简单获取及判断提交来源的方法
Apr 22 PHP
php基于curl实现的股票信息查询类实例
Nov 11 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
Oct 10 PHP
详解PHP中的8个魔术常量
Jul 06 PHP
在Zeus Web Server中安装PHP语言支持
Oct 09 #PHP
通过对php一些服务器端特性的配置加强php的安全
Oct 09 #PHP
一个阿拉伯数字转中文数字的函数
Oct 09 #PHP
PHP与已存在的Java应用程序集成
Oct 09 #PHP
使用PHP模拟HTTP认证
Oct 09 #PHP
在PHP中使用XML
Oct 09 #PHP
使用PHP维护文件系统
Oct 09 #PHP
You might like
PHP 反射机制实现动态代理的代码
2008/10/22 PHP
PHP中“简单工厂模式”实例代码讲解
2012/09/04 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
解析PHP跨站刷票的实现代码
2013/06/18 PHP
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
javascript instanceof 与typeof使用说明
2010/01/11 Javascript
js获取网页高度(详细整理)
2012/12/28 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
Vue2.0实现购物车功能
2017/06/05 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
Python工程师面试必备25条知识点
2018/01/17 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
解决python运行效率不高的问题
2020/07/20 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
Python字符串及文本模式方法详解
2020/09/10 Python
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
大二自我鉴定
2014/01/31 职场文书
珍惜水资源建议书
2014/03/12 职场文书
产品委托授权书范本
2014/09/16 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android
MYSQL 表的全面总结
2021/11/11 MySQL