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 相关文章推荐
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
Sep 02 PHP
新安装的MySQL数据库需要注意的安全知识
Jul 30 PHP
探讨:如何编写PHP扩展
Jun 13 PHP
php的hash算法介绍
Feb 13 PHP
ThinkPHP3.1新特性之字段合法性检测详解
Jun 19 PHP
ThinkPHP模板自定义标签使用方法
Jun 26 PHP
php实现两个数组相加的方法
Feb 17 PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 PHP
PHP安装memcached扩展笔记
May 28 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
Mar 31 PHP
php自动载入类用法实例分析
Jun 24 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 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
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
2018/04/27 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
Python重新加载模块的实现方法
2018/10/16 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
python批量修改交换机密码的示例
2020/09/22 Python
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
Spartoo葡萄牙鞋类网站:线上销售鞋履与时尚配饰
2017/01/11 全球购物
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
2014城乡环境综合治理工作总结
2014/12/19 职场文书
用Python实现Newton插值法
2021/04/17 Python
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技