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 相关文章推荐
在 PHP 中使用随机数的三个步骤
Oct 09 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 PHP
kohana框架上传文件验证规则写法示例
Jul 14 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
Yii2中添加全局函数的方法分析
May 04 PHP
php之header的不同用法总结(实例讲解)
Nov 28 PHP
php实现文章评论系统
Feb 18 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
使用 php4 加速 web 传输
2006/10/09 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
php生成excel列名超过26列大于Z时的解决方法
2014/12/29 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
2017/01/17 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
移动节点的jquery代码
2014/01/13 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
Element Input组件分析小结
2018/10/11 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
Python字符编码判断方法分析
2016/07/01 Python
Python实现Sqlite将字段当做索引进行查询的方法
2016/07/21 Python
Python探索之修改Python搜索路径
2017/10/25 Python
详解Django rest_framework实现RESTful API
2018/05/24 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
python退出循环的方法
2020/06/18 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
技校教师求职简历的自我评价
2013/10/20 职场文书
酒店副总岗位职责
2013/12/24 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
个人贷款担保书
2014/04/01 职场文书
2014年管理工作总结
2014/11/22 职场文书