用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 Memcache 中实现消息队列
Nov 24 PHP
PHP+ajax 无刷新删除数据
Feb 20 PHP
php下连接mssql2005的代码
Jan 17 PHP
PHP中数据库单例模式的实现代码分享
Aug 21 PHP
php常用数学函数汇总
Nov 21 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
Jan 07 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
Mar 18 PHP
php实现当前页面点击下载文件的实例代码
Nov 16 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 PHP
PHP按符号截取字符串的指定部分的实现方法
Sep 10 PHP
PHP数组与字符串互相转换实例
May 05 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下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
PHP CodeIgniter框架的工作原理研究
2015/03/30 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
[22:59]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python登录QQ邮箱发信的实现代码
2013/02/10 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
python实现数据库跨服务器迁移
2018/04/12 Python
Python编写一个优美的下载器
2018/04/15 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
初中生个人学习的自我评价
2013/12/04 职场文书
投标邀请书范文
2014/01/31 职场文书
年终奖发放方案
2014/06/02 职场文书
2014年底个人工作总结
2015/03/10 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
幸福来敲门观后感
2015/06/04 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记