用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 防恶意刷新实现代码
May 16 PHP
PHP+ACCESS 文章管理程序代码
Jun 21 PHP
用PHP将数据导入到Foxmail的实现代码
Sep 05 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
php5.5新数组函数array_column使用
Jul 08 PHP
PHP利用REFERER根居访问来地址进行页面跳转
Sep 28 PHP
php数组转换js数组操作及json_encode的用法详解
Oct 26 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
PHP的引用详解
Feb 22 PHP
php数组冒泡排序算法实例
May 06 PHP
PHP实现字符串大小写转函数的功能实例
Feb 06 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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
PHP如何获取当前主机、域名、网址、路径、端口等参数
2017/06/09 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
JS不完全国际化&amp;本地化手册 之 理论篇
2016/09/27 Javascript
深入理解react-router 路由的实现原理
2018/09/26 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
Python 机器学习库 NumPy入门教程
2018/04/19 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
浅析PEP572: 海象运算符
2019/10/15 Python
从0到1使用python开发一个半自动答题小程序的实现
2020/05/12 Python
django中related_name的用法说明
2020/05/20 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
什么是.net
2015/08/03 面试题
高级人员简历的自我评价分享
2013/11/03 职场文书
村官工作鉴定评语
2014/01/27 职场文书
恶搞卫生巾广告词
2014/03/18 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
放弃继承权公证书
2015/01/23 职场文书
第一节英语课开场白
2015/06/01 职场文书
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android
Javascript 解构赋值详情
2021/11/17 Javascript
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle