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
Oct 09 PHP
PHP常用代码
Nov 23 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
php操作excel文件 基于phpexcel
Jul 02 PHP
php中使用$_REQUEST需要注意的一个问题
May 02 PHP
浅谈PHP接收POST数据方式
Jun 05 PHP
PHP简单装饰器模式实现与用法示例
Jun 22 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
thinkphp5使用无限极分类
Feb 18 PHP
asp.net和php的区别点总结
Oct 10 PHP
TP5框架实现签到功能的方法分析
Apr 05 PHP
PHP实现倒计时功能
Nov 16 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执行速度全攻略(下)
2006/10/09 PHP
PHP函数常用用法小结
2010/02/08 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
Python的Django框架中的Context使用
2015/07/15 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
python判断正负数方式
2020/06/03 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
纽约海:Sea New York
2018/11/04 全球购物
团支书的期末学习总结自我评价
2013/11/01 职场文书
理工大学毕业生自荐信
2013/11/01 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
给学校的建议书400字
2015/09/14 职场文书