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 23 PHP
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
Mar 09 PHP
解析PHP实现多进程并行执行脚本
Jun 18 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
php小技巧之过滤ascii控制字符
May 14 PHP
php判断两个日期之间相差多少个月份的方法
Jun 18 PHP
php简单生成随机数的方法
Jul 30 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 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 和 HTML
2006/10/09 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
网站上面有这种切换效果
2006/06/26 Javascript
Js+XML 操作
2006/09/20 Javascript
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
2018/08/07 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
vue实现计算器功能
2020/02/22 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
python中函数传参详解
2016/07/03 Python
python xml解析实例详解
2016/11/14 Python
python安装oracle扩展及数据库连接方法
2017/02/21 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
python的range和linspace使用详解
2019/11/27 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
python3实现飞机大战
2020/11/29 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
python中spy++的使用超详细教程
2021/01/29 Python
python实现控制台输出颜色
2021/03/02 Python
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
2014年大班元旦活动方案
2014/02/26 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
党小组推荐意见
2015/06/02 职场文书
医学会议开幕词
2016/03/03 职场文书