用PHP实现图象锐化代码


Posted in PHP onJune 14, 2007
<?
//读取图像的类型  
//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";  
		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);
}
?>
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
		";  
 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 ss7.5的数据调用 (笔记)
Mar 08 PHP
php中转义mysql语句的实现代码
Jun 24 PHP
PHP 验证码的实现代码
Jul 17 PHP
php设置编码格式的方法
Mar 05 PHP
如何用php获取程序执行的时间
Jun 09 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
Nov 15 PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 PHP
详解json在php中的应用
Sep 30 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 PHP
PHP静态新闻列表自动生成代码
Jun 14 #PHP
discuz安全提问算法
Jun 06 #PHP
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 #PHP
phpMyAdmin下载、安装和使用入门教程
May 31 #PHP
测试您的 PHP 水平的题目
May 30 #PHP
Discuz板块横排显示图片的实现方法
May 28 #PHP
中国站长站 For Dede4.0 采集规则
May 27 #PHP
You might like
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
antd Upload 文件上传的示例代码
2018/12/14 Javascript
javascript实现日历效果
2019/06/17 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
python执行get提交的方法
2015/04/29 Python
Python中splitlines()方法的使用简介
2015/05/20 Python
python爬虫入门教程--优雅的HTTP库requests(二)
2017/05/25 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
django 信号调度机制详解
2019/07/19 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
2015年元旦文艺汇演主持词
2014/03/26 职场文书
小学生环保演讲稿
2014/04/25 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
同意离婚答辩状
2015/05/22 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python