PHP中实现图片的锐化


Posted in PHP onOctober 09, 2006

<?

//读取图像的类型

//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<br/>";

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);

} 

?>

<form name="FormName" action="" method="post">

请输入图片的本地路径或URL:<br/>

<input name="ImageName" type="text" value="<?=$_POST["ImageName"]?>" size=32><br/>

锐化度数(例:0.6、3.0):<br/>

<input name="Degree" type="text" value="<?=$_POST["Degree"]?>"><br/>

<input type="submit" value="提交">

</form> 

改了一下,省了一个$im:  

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<br>";

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 相关文章推荐
example2.php
Oct 09 PHP
discuz Passport 通行证 整合笔记
Jun 30 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
php字符串截取的简单方法
Jul 04 PHP
PHP URL参数获取方式的四种例子
Feb 28 PHP
PHP5各个版本的新功能和新特性总结
Mar 16 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
Jun 05 PHP
php截取字符串函数分享
Feb 02 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
May 13 PHP
合格的PHP程序员必备技能
Nov 13 PHP
PHP常见漏洞攻击分析
Feb 21 PHP
PHP使用非对称加密算法RSA
Apr 21 PHP
在Zeus Web Server中安装PHP语言支持
Oct 09 #PHP
通过对php一些服务器端特性的配置加强php的安全
Oct 09 #PHP
一个阿拉伯数字转中文数字的函数
Oct 09 #PHP
PHP与已存在的Java应用程序集成
Oct 09 #PHP
使用PHP模拟HTTP认证
Oct 09 #PHP
在PHP中使用XML
Oct 09 #PHP
使用PHP维护文件系统
Oct 09 #PHP
You might like
php自动加载autoload机制示例分享
2014/02/20 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
python队列queue模块详解
2018/04/27 Python
使用Python处理BAM的方法
2018/09/28 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
初一新生军训方案
2014/05/22 职场文书
工地安全标语
2014/06/07 职场文书
小学领导班子对照材料
2014/08/23 职场文书
教师节学生演讲稿
2014/09/03 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android
Python函数中apply、map、applymap的区别
2021/11/27 Python
gojs实现蚂蚁线动画效果
2022/02/18 Javascript
分享7个 Python 实战项目练习
2022/03/03 Python