<?php
//读取图像的类型
//1=GIF,2=JPG,3=PNG,4=SWF,5=PSD,6=BMP,7=TIFF(intelbyteorder),8=TIFF(motorolabyteorder),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++){
/*
ImageColorsForIndex --- 从索引值取得颜色
语法 : array imagecolorsforindex (int im, int index)
说明 :此函数传回指定的颜色索引值的RGB值,传回的数组有red、green和blue这三个索引值,数组的值为指定的颜色索引值的RGB值。
ImageColorAt --- 取得像素的颜色索引值
语法 : int imagecolorat (int im, int x, int 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("colorallocatefaileat$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>

PHP 做图片锐化处理的更多相关文章

  1. 用Lighttpd做图片服务器

    http://www.lsanotes.cn/install_lighttpd 用Lighttpd做图片服务器 一.安装lighttpd所需的库文件1.安装 pcrewgetftp://ftp.csx ...

  2. 使用HTML5的canvas做图片剪裁

    前言 图片裁剪上传,不仅是一个很贴合用户体验的功能,还能够统一特定图片尺寸,优化网站排版,一箭双雕. 需求就是那么简单,在浏览器里裁剪图片并上传到服务器. 我第一个想到的方法就是,将图片和裁剪参数(x ...

  3. PHP语言学习之php做图片上传功能

    本文主要向大家介绍了PHP语言学习之php做图片上传功能,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 今天来做一个图片上传功能的插件,首先做一个html文件:text.php < ...

  4. 基于jQuery适合做图片类网站的特效

    分享一款基于jquery适合做图片类网站的特效.这是一款鼠标经过图片滑动弹出标题效果代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="c ...

  5. 使用FormData数据做图片上传: new FormData() canvas实现图片压缩

    使用FormData数据做图片上传: new FormData()       canvas实现图片压缩 ps: 千万要使用append不要用set   苹果ios有兼容问题导致数据获取不到,需要后台 ...

  6. Windows+Nginx+IIS做图片分布式存储详细步骤

    最近几天,一直在学习nginx在windows平台下的使用,为了寻找几种大量图片分布式存储而且有相对简单的存储方案 nginx是一种,还找到一种MongoDB GridFS 这两种方案我还是比较中意的 ...

  7. tomcat用做图片服务器

    最近做了个小网站,就是用tinyce富文本编辑器,https://www.511easy.com/ 保持字体排版和图片 发现博客园的图片,一天之后就无法显示 就想着自己做一个图片服务器,上传图片到指定 ...

  8. 记一次IE浏览器做图片预览的坑

    随便写写吧,被坑死了 IE 10 及 IE10以上,可以使用FileReader的方式,来做图片预览,加载本地图片显示 IE 9 8 7 没有FileReader这个对象,所以只能使用微软自己的东西来 ...

  9. ViewPager做图片浏览器,加载大量图片OOM的问题修正

    /** * @author CHQ * @version 1.0 * @date 创建时间: 2016/7/26 17:18 * @parameter * @return * 图片查看器 * //可以 ...

随机推荐

  1. PHP————系统常量

    PHP常量默认为大小写敏感.传统上常量标识符总是大写的. PHP常量名和其它任何 PHP 标签遵循同样的命名规则.合法的常量名以字母或下划线开始,后面跟着任何字母,数字或下划线.用正则表达式是这样表达 ...

  2. 优动漫PAINT中误删工具怎么办?

    最近收到一些小伙伴的提问,说我不小心把 XXX工具从面板上删掉了怎么办?本教程就来给大家分 享一下遇到这个问题时的三种解决方法,遇到同样问题的小伙伴们赶紧进来看一下哟! 优动漫PAINT下载:http ...

  3. 路飞学城Python-Day15

    模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录每月日常消费流水 提供还 ...

  4. [Python随笔]>>字符串大小写是如何转换的?

    首先看下Python的源码 Emmmm,说明是底层的C实现的,所以只放了说明 再看看别人家孩子的博客:https://blog.csdn.net/world6/article/details/6994 ...

  5. Node_进阶_8

    Node进阶第八天 一.复习 Node.js特点:单线程.异步I/O(非阻塞I/O).事件驱动(事件环). 适合的程序:就是没有太多的计算,I/O比较多的业务. 举例:留言本.考试系统.说说.图片裁切 ...

  6. (WC2018模拟十二)【FJOI2016集训Day7T3】Xor-Mul棋盘

    是不是应该第100篇博文纪念一下? 题解: 本质简单题...但是我没仔细看这题... 观察它的两个式子,都是xor完再乘以某个数,意味着d数组的每个二进制位对答案的贡献都是独立的,可以每一位分开处理. ...

  7. @GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping

    @GetMapping.@PostMapping.@PutMapping.@DeleteMapping.@PatchMapping  @GetMapping是一个组合注解,是@RequestMappi ...

  8. 【python爬虫和正则表达式】爬取表格中的的二级链接

    开始进公司实习的一个任务是整理一个网页页面上二级链接的内容整理到EXCEL中,这项工作把我头都搞大了,整理了好几天,实习生就是端茶送水的.前段时间学了爬虫,于是我想能不能用python写一个爬虫一个个 ...

  9. ShopEx文章页添加上一篇下一篇功能

    在全部的文章页中,会常常发现都会有这么一个功能.能引导用户去查看上一篇文章或下一篇文章,而在ShopEx中,我DEZEND了一下文章模型.并没有找到上一篇这种函数功能,因此,这就须要我们手动在相应的文 ...

  10. mysql-联结

    一.联结 联结是利用SQL的select能执行的最重要的操作. 1.关系表:假如有一个包含产品目录的数据库表,其中每个类别的物品占一行.对于每种物品要求存储的信息包括产品描述和价格,以及生产该产品的供 ...