用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之第一天
Oct 09 PHP
图书管理程序(一)
Oct 09 PHP
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
php插入含有特殊符号数据的处理方法
Nov 24 PHP
php简单实现文件或图片强制下载的方法
Dec 06 PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 PHP
yii2 commands模式以及配置crontab定时任务的方法
Aug 19 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
May 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使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
javascript 继承实现方法
2009/08/26 Javascript
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
2015/07/09 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
Vue触发式全局组件构建的方法
2018/11/28 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
布同自制Python函数帮助查询小工具
2011/03/13 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
python sqlite的Row对象操作示例
2019/09/11 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
python 5个顶级异步框架推荐
2020/09/09 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
应付会计岗位职责
2013/12/12 职场文书
村官学习十八大感想
2014/01/15 职场文书
同事打架检讨书
2014/02/04 职场文书
护林员个人总结
2015/03/04 职场文书
初中重阳节活动总结
2015/05/05 职场文书
学校教师培训工作总结
2015/10/14 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
2019年思想汇报
2019/06/20 职场文书
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL