用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 相关文章推荐
一个用于网络的工具函数库
Oct 09 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
php中通过curl检测页面是否被百度收录
Sep 27 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
PHP中Enum(枚举)用法实例详解
Dec 07 PHP
PHP使用MPDF类生成PDF的方法
Dec 08 PHP
PHP实现权限管理功能示例
Sep 22 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
Oct 15 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 PHP
PHP引擎php.ini参数优化深入讲解
Mar 24 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 截取字符串专题集合
2010/08/19 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
jquery 表单进行客户端验证demo
2009/08/24 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
Javascript浅谈之this
2013/12/17 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
理解javascript异步编程
2016/01/27 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
python数值基础知识浅析
2019/11/19 Python
Python3 集合set入门基础
2020/02/10 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
基于python实现操作git过程代码解析
2020/07/27 Python
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
android面试问题与答案
2016/12/27 面试题
外国人聘用意向书
2014/04/01 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js