用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日历[测试通过]
Mar 27 PHP
PHP 地址栏信息的获取代码
Jan 07 PHP
PHP生成UTF8文件的方法
May 15 PHP
PHP如何解决网站大流量与高并发的问题
Jun 25 PHP
支持png透明图片的php生成缩略图类分享
Feb 08 PHP
php实现倒计时效果
Dec 19 PHP
Symfony2联合查询实现方法
Mar 18 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
Laravel find in set排序实例
Oct 09 PHP
php模拟post提交请求调用接口示例解析
Aug 07 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无限极分类的案例教程
2016/05/09 PHP
PHP+MySQL存储数据常见中文乱码问题小结
2016/06/13 PHP
PHP多进程编程实例详解
2017/07/19 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
jQuery对象和DOM对象的相互转化实现代码
2010/03/02 Javascript
更快的异步执行(setTimeout多浏览器)
2014/08/12 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
jQuery UI设置固定日期选择特效代码分享
2015/08/27 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
Vue指令指令大全
2019/02/09 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
用Python开发app后端有优势吗
2020/06/29 Python
python学习笔记之多进程
2020/08/06 Python
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
公司门卫岗位职责
2014/03/15 职场文书
节水口号标语
2014/06/19 职场文书
活动总结范文
2014/08/30 职场文书
2015年教师节感言
2015/08/03 职场文书
爱护公物主题班会
2015/08/17 职场文书