用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 相关文章推荐
支持oicq头像的留言簿(一)
Oct 09 PHP
PHP+DBM的同学录程序(1)
Oct 09 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
Mar 13 PHP
浅谈PHP与C#的值类型指向区别的详解
May 21 PHP
用PHP和Shell写Hadoop的MapReduce程序
Apr 15 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
Apr 25 PHP
PHP文件上传之多文件上传的实现思路
Jan 27 PHP
ThinkPHP的常用配置选项汇总
Mar 24 PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
php生成条形码的图片的实例详解
Sep 13 PHP
PHP生成图表pChart的示例解析
Jul 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
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
使用php显示搜索引擎来的关键词
2014/02/13 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
2017/11/24 PHP
JQuery 常用操作代码
2010/03/14 Javascript
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
JS删除数组元素的函数介绍
2013/03/27 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
vue-cli如何引入bootstrap工具的方法
2017/10/19 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
[05:09]第二届DOTA2亚洲邀请赛决赛日比赛集锦:iG 3:0 OG夺冠
2017/04/05 DOTA
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
python使用PyFetion来发送短信的例子
2014/04/22 Python
python实现汉诺塔算法
2021/03/01 Python
Python turtle库绘制菱形的3种方式小结
2019/11/23 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
python 5个实用的技巧
2020/09/27 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
生产部主管岗位职责
2014/01/06 职场文书
如何撰写岗位职责
2014/02/01 职场文书
人事任命书范文
2014/06/04 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang