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下连接ftp实现文件的上传、下载、删除文件实例代码
Jun 03 PHP
php 连接mysql连接被重置的解决方法
Feb 15 PHP
php学习之数据类型之间的转换介绍
Jun 09 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
php获取错误信息的方法
Jul 17 PHP
PHP+JavaScript实现无刷新上传图片
Feb 21 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
Apr 18 PHP
laravel框架中间件 except 和 only 的用法示例
Jul 12 PHP
php 中self,this的区别和操作方法实例分析
Nov 04 PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 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开发模式(简写版)
2007/03/15 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
2010/02/09 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
ExtJS[Desktop]实现图标换行示例代码
2013/11/17 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
python实现在目录中查找指定文件的方法
2014/11/11 Python
名片管理系统python版
2018/01/11 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
办公室主任职责范文
2013/11/08 职场文书
售后客服个人自我评价
2014/09/14 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
邹越演讲观后感
2015/06/15 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js