用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排序之二维数组的按照字母排序实现代码
Aug 13 PHP
PHP无刷新上传文件实现代码
Sep 19 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
php使用$_POST或$_SESSION[]向js函数传参
Sep 16 PHP
PHP动态页生成静态页的3种常用方法
Nov 13 PHP
PHP中捕获超时事件的方法实例
Feb 12 PHP
php遍历类中包含的所有元素的方法
May 12 PHP
zen cart实现订单中增加paypal中预留电话的方法
Jul 12 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
Feb 07 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
php实现登录页面的简单实例
Sep 29 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中使用PDF文档功能
2006/10/09 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
javascript里的条件判断
2007/02/27 Javascript
javascript一点特殊用法
2008/05/28 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
javascript是怎么继承的介绍
2012/01/05 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
vue编写简单的购物车功能
2021/01/08 Vue.js
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
python 如何调用 dubbo 接口
2020/09/24 Python
详解python polyscope库的安装和例程
2020/11/13 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
军训 自我鉴定
2014/02/03 职场文书
信息工作经验交流材料
2014/05/28 职场文书
公司与个人合作协议书
2016/03/19 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang