用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 常用函数库和一些实用小技巧
Jan 01 PHP
基于PHP中的常用函数回顾
Jul 11 PHP
php中session退出登陆问题
Feb 27 PHP
PHP使用Alexa API获取网站的Alexa排名例子
Jun 12 PHP
php之Smarty模板使用方法示例详解
Jul 08 PHP
ThinkPHP分页实例
Oct 15 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
Nov 29 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
PHP面向对象多态性实现方法简单示例
Sep 27 PHP
PDO::_construct讲解
Jan 27 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 PHP
50个优秀经典PHP算法大集合 附源码
Aug 26 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脚本的10个技巧(4)
2006/10/09 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
JQuery UI皮肤定制
2009/07/27 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
Javascript 遍历页面text控件详解
2014/01/06 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
python3.0 字典key排序
2008/12/24 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
2017/04/14 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
python版DDOS攻击脚本
2019/06/12 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
体育老师的教学自我评价分享
2013/11/19 职场文书
上班迟到检讨书
2014/01/10 职场文书
生态养殖创业计划书
2014/05/06 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
2014年平安夜寄语
2014/12/08 职场文书
爱岗敬业事迹材料
2014/12/24 职场文书
优秀班集体申报材料
2014/12/25 职场文书
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS