用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的ob_start();控制您的浏览器cache!
Feb 14 PHP
php设计模式之命令模式的应用详解
May 21 PHP
PHP+MySQL修改记录的方法
Jan 21 PHP
PHP计算指定日期所在周的开始和结束日期的方法
Mar 24 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
May 04 PHP
PHP中抽象类和抽象方法概念与用法分析
May 24 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 PHP
[原创]PHP实现SQL语句格式化功能的方法
Jul 28 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
php 中phar包的使用教程详解
Oct 26 PHP
PHP常见字符串操作函数与用法总结
Mar 04 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 方便水印和缩略图的图形类
2009/05/21 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
jquery和ajax的关系详细介绍
2013/11/29 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
原生js实现验证码功能
2017/03/16 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
checkbox在vue中的用法小结
2018/11/13 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
python 异常处理总结
2016/10/18 Python
python 不以科学计数法输出的方法
2018/07/16 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
运行时异常与一般异常有何异同?
2014/01/05 面试题
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
送给程序员的20个Java集合面试问题
2014/08/06 面试题
趣味运动会活动方案
2014/02/12 职场文书
大学运动会入场词
2014/02/22 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
2014年校长工作总结
2014/12/11 职场文书
2015年教师节感言
2015/08/03 职场文书
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
SQL中的连接查询详解
2022/06/21 SQL Server