这篇是关于修改图片的效果,主要还是用到php中的GD库中的函数,没想到php还有这凶残能力,出乎我的预料。

先看代码upload_image.php,主要是一个上传控件,用来选择图片

  1. <html>
  2. <head>
  3. <title></title>
  4. <style type="text/css"></style>
  5. </head>
  6. <body>
  7. <form action="check_image.php" method="post" enctype="multipart/form-data">
  8. <table>
  9. <tr>
  10. <td>Your username</td>
  11. <td><input type="text" name="username" /></td>
  12. </tr>
  13. <tr>
  14. <td>Upload image*</td>
  15. <td><input type="file" name="uploadfile"/></td>
  16. </tr>
  17. <tr>
  18. <td colspan="2">
  19. <small><em> * Acceptable image formats include: GIF, JPG/JPEG and PNG.</em></small>
  20. </td>
  21. </tr>
  22. <tr>
  23. <td>Image Caption</td>
  24. <td><input type="text" name="caption"/></td>
  25. </tr>
  26. <tr>
  27. <td colspan="2" style="text-align:center;">
  28. <input type="submit" name="submit" value="Upload" />
  29. </td>
  30. </tr>
  31. </table>
  32. </form>
  33. </body>
  34. </html>

然后是上传和处理图片的逻辑check_image.php

  1. <?php
  2. //修改图片效果
  3. $db = mysql_connect('localhost','root','Ctrip07185419') or die('can not connect to database');
  4. mysql_select_db('moviesite',$db) or die(mysql_error($db));
  5. //上传文件的路径
  6. $dir = 'D:\Serious\phpdev\test\images';
  7.  
  8. //upload_image.php页面传递过来的参数,如果是上传图片
  9. if($_POST['submit'] == 'Upload')
  10. {
  11. if($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK)
  12. {
  13. switch($_FILES['uploadfiel']['error'])
  14. {
  15. case UPLOAD_ERR_INI_SIZE:
  16. die('The uploaded file exceeds the upload_max_filesize directive');
  17. break;
  18. case UPLOAD_ERR_FORM_SIZE:
  19. die('The upload file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form');
  20. break;
  21. case UPLOAD_ERR_PARTIAL:
  22. die('The uploaded file was only partially uploaded');
  23. break;
  24. case UPLOAD_ERR_NO_FILE:
  25. die('No file was uploaded');
  26. break;
  27. case UPLOAD_ERR_NO_TMP_DIR:
  28. die('The server is missing a temporary folder');
  29. break;
  30. case UPLOAD_ERR_CANT_WRITE:
  31. die('The server fail to write the uploaded file to the disk');
  32. break;
  33. case UPLOAD_ERR_EXTENSION:
  34. die('The upload stopped by extension');
  35. break;
  36. }
  37. }
  38. $image_caption = $_POST['caption'];
  39. $image_username = $_POST['username'];
  40. $image_date = date('Y-m-d');
  41. list($width,$height,$type,$attr) = getimagesize($_FILES['uploadfile']['tmp_name']);
  42. $error = 'The file you upload is not a supported filetype';
  43. switch($type)
  44. {
  45. case IMAGETYPE_GIF:
  46. $image = imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or die($error);
  47. break;
  48. case IMAGETYPE_JPEG:
  49. $image = imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or die($error);
  50. break;
  51. case IMAGETYPE_PNG:
  52. $image = imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or die($error);
  53. break;
  54. default:
  55. break;
  56. }
  57. $query = 'insert into images(image_caption,image_username,image_date) values("'.$image_caption.'" , "'.$image_username.'","'.$image_date.'")';
  58. $result = mysql_query($query,$db) or die(mysql_error($db));
  59. $last_id = mysql_insert_id();
  60.  
  61. // $imagename = $last_id.'.jpg';
  62. // imagejpeg($image,$dir.'/'.$imagename);
  63. // imagedestroy($image);
  64.  
  65. $image_id = $last_id;
  66. imagejpeg($image , $dir.'/'.$image_id.'.jpg');
  67. imagedestroy($image);
  68. }
  69. else //如果图片已经上传,则从数据库中取图片名字
  70. {
  71. $query = 'select image_id,image_caption,image_username,image_date from images where image_id='.$_POST['id'];
  72. $result = mysql_query($query,$db) or die(mysql_error($db));
  73. extract(mysql_fetch_assoc($result));
  74. list($width,$height,$type,$attr) = getimagesize($dir.'/'.$image_id.'.jpg');
  75. }
  76.  
  77. //如果是保存图片
  78. if($_POST['submit'] == 'Save')
  79. {
  80. if(isset($_POST['id']) && ctype_digit($_POST['id']) && file_exists($dir.'/'.$_POST['id'].'.jpg'))
  81. {
  82. $image = imagecreatefromjpeg($dir.'/'.$_POST['id'].'.jpg');
  83. }
  84. else
  85. {
  86. die('invalid image specified');
  87. }
  88. $effect = (isset($_POST['effect'])) ? $_POST['effect'] : -1;
  89. switch($effect)
  90. {
  91. case IMG_FILTER_NEGATE:
  92. imagefilter($image , IMG_FILTER_NEGATE); //将图像中所有颜色反转
  93. break;
  94. case IMG_FILTER_GRAYSCALE:
  95. imagefilter($image , IMG_FILTER_GRAYSCALE); //将图像转换为灰度的
  96. break;
  97. case IMG_FILTER_EMBOSS:
  98. imagefilter($image , IMG_FILTER_EMBOSS); //使图像浮雕化
  99. break;
  100. case IMG_FILTER_GAUSSIAN_BLUR:
  101. imagefilter($image , IMG_FILTER_GAUSSIAN_BLUR); //用高斯算法模糊图像
  102. break;
  103. }
  104. imagejpeg($image , $dir.'/'.$_POST['id'].'.jpg' , 100);
  105. ?>
  106. <html>
  107. <head>
  108. <title>Here is your pic!</title>
  109. </head>
  110. <body>
  111. <h1>Your image has been saved!</h1>
  112. <img src="data:images/<?php echo $_POST['id'];?>.jpg" alt="" />
  113. </body>
  114. </html>
  115. <?php
  116. }
  117. else
  118. {
  119. ?>
  120. <html>
  121. <head>
  122. <title>Here is your pic!</title>
  123. </head>
  124. <body>
  125. <h1>So how does it feel to be famous?</h1>
  126. <p>Here is the picture you just uploaded to your servers:</p>
  127. <!--<img src="data:images/<?php echo $imagename;?>" alt="" style="float:left;" />-->
  128. </body>
  129. </html>
  130. <?php
  131. if($_POST['submit'] == 'Upload')
  132. {
  133. $imagename = 'images/'.$image_id.'.jpg';
  134. }
  135. else
  136. {
  137. $imagename = 'image_effect.php?id='.$image_id.'&e='.$_POST['effect'];
  138. }
  139. ?>
  140. <img src="<?php echo $imagename;?>" style="float:left;" alt="" />
  141. <table>
  142. <tr>
  143. <td>Image save as:</td>
  144. <td><?php $image_id?></td>
  145. </tr>
  146. <tr>
  147. <td>Height:</td>
  148. <td><?php echo $height;?></td>
  149. </tr>
  150. <tr>
  151. <td>Widht:</td>
  152. <td><?php echo $width;?></td>
  153. </tr>
  154. <tr>
  155. <td>Upload date:</td>
  156. <td><?php echo $image_date;?></td>
  157. </tr>
  158. </table>
  159. <p>You may apply a special effect to your image from the list of option below.
  160. Note:saving an image with any of the filters applied <em>can be undone</em>
  161. </p>
  162. <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
  163. <div>
  164. <input type="hidden" name="id" value="<?php echo $image_id;?>"/>
  165. <select name="effect" id="">
  166. <option value="-1">None</option>
  167. <?php
  168. echo '<option value="'.IMG_FILTER_GRAYSCALE.'" ';
  169. if(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_GRAYSCALE)
  170. {
  171. echo 'selected="selected"';
  172. }
  173. echo ' >Black and white</option>';
  174.  
  175. echo '<option value="'.IMG_FILTER_GAUSSIAN_BLUR.'"';
  176. if(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_GAUSSIAN_BLUR)
  177. {
  178. echo ' selected="selected"';
  179. }
  180. echo '>Blur</option>';
  181.  
  182. echo '<option value="'.IMG_FILTER_EMBOSS.'"';
  183. if(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_EMBOSS)
  184. {
  185. echo 'selected="selected"';
  186. }
  187. echo '>Emboss</option>';
  188.  
  189. echo '<option value="'.IMG_FILTER_NEGATE.'"';
  190. if(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_NEGATE)
  191. {
  192. echo 'selected="selected"';
  193. }
  194. echo '>Negative</option>';
  195. ?>
  196. </select><br />
  197. <input type="submit" value="Preview" name="submit" /><br />
  198. <input type="submit" value="Save" name="submit" />
  199.  
  200. </div>
  201. </form>
  202. <?php
  203. }
  204. ?>

最后是一个预览效果的页面image_effect.php

  1. <?php
  2. $dir = 'D:\Serious\phpdev\test\images';
  3.  
  4. if(isset($_GET['id']) && ctype_digit($_GET['id']) && file_exists($dir.'/'.$_GET['id'].'.jpg'))
  5. {
  6. $image = imagecreatefromjpeg($dir.'/'.$_GET['id'].'.jpg');
  7. }
  8. else
  9. {
  10. die('invalid image specified');
  11. }
  12.  
  13. $effect = (isset($_GET['e'])) ? $_GET['e'] : -1;
  14.  
  15. switch($effect)
  16. {
  17. case IMG_FILTER_NEGATE:
  18. imagefilter($image , IMG_FILTER_NEGATE);
  19. break;
  20. case IMG_FILTER_GRAYSCALE:
  21. imagefilter($image , IMG_FILTER_GRAYSCALE);
  22. break;
  23. case IMG_FILTER_EMBOSS:
  24. imagefilter($image , IMG_FILTER_EMBOSS);
  25. break;
  26. case IMG_FILTER_GAUSSIAN_BLUR:
  27. imagefilter($image , IMG_FILTER_GAUSSIAN_BLUR);
  28. break;
  29. }
  30. header('Content-Type:image/jpeg');
  31. imagejpeg($image , '' , 100);
  32.  
  33. ?>

第二个image_check.php有点乱,在这个页面中有上传图片,处理图片,还有预览图片的部分逻辑,注意下面这段

  1. <?php
  2. if($_POST['submit'] == 'Upload')
  3. {
  4. $imagename = 'images/'.$image_id.'.jpg';
  5. }
  6. else
  7. {
  8. $imagename = 'image_effect.php?id='.$image_id.'&e='.$_POST['effect'];
  9. }
  10. ?>
  11. <img src="<?php echo $imagename;?>" style="float:left;" alt="" />

如果是上传直接访问图片,如果是预览则从image_effect.php中读取图片,这里是从内存中读取图片并根据选择的处理效果来展示图片。如下

  1. switch($effect)
  2. {
  3. case IMG_FILTER_NEGATE:
  4. imagefilter($image , IMG_FILTER_NEGATE);
  5. break;
  6. case IMG_FILTER_GRAYSCALE:
  7. imagefilter($image , IMG_FILTER_GRAYSCALE);
  8. break;
  9. case IMG_FILTER_EMBOSS:
  10. imagefilter($image , IMG_FILTER_EMBOSS);
  11. break;
  12. case IMG_FILTER_GAUSSIAN_BLUR:
  13. imagefilter($image , IMG_FILTER_GAUSSIAN_BLUR);
  14. break;
  15. }

当使用imagefilter方法处理图片之后会把图片输出到页面,这里要注意imagejpeg方法的第二个参数是空字符串,这样它就不会写入到硬盘中了,如果第二个参数设置了会覆盖原有的图片,这样可以让用户在保存图片之前随意的预览效果,如下:

  1. header('Content-Type:image/jpeg');
  2. imagejpeg($image , '' , 100);

在check_image.php中有调用到类似的方法,但是这里指定了第二个参数,就是用来保存图片的:

  1. imagejpeg($image , $dir.'/'.$_POST['id'].'.jpg' , 100);

注意这里哦我们只写了三种处理效果,这个只是所有枚举中的一部分,我们来看所有的处理方式:

IMG_FILTER_NEGATE:将图像中所有颜色反转。
IMG_FILTER_GRAYSCALE:将图像转换为灰度的。
IMG_FILTER_BRIGHTNESS:改变图像的亮度。用 arg1 设定亮度级别。
IMG_FILTER_CONTRAST:改变图像的对比度。用 arg1 设定对比度级别。
IMG_FILTER_COLORIZE:与 IMG_FILTER_GRAYSCALE 类似,不过可以指定颜色。用 arg1,arg2 和 arg3 分别指定 red,blue 和 green。每种颜色范围是 0 到 255。
IMG_FILTER_EDGEDETECT:用边缘检测来突出图像的边缘。
IMG_FILTER_EMBOSS:使图像浮雕化。
IMG_FILTER_GAUSSIAN_BLUR:用高斯算法模糊图像。
IMG_FILTER_SELECTIVE_BLUR:模糊图像。
IMG_FILTER_MEAN_REMOVAL:用平均移除法来达到轮廓效果。
IMG_FILTER_SMOOTH:使图像更柔滑。用 arg1 设定柔滑级别。

是不是很惊艳,php很强大的。

PHP修改图片的更多相关文章

  1. 利用Photoshop修改图片以达到投稿要求

    摘自:http://www.dxy.cn/bbs/thread/8602152#8602152 利用Photoshop修改图片以达到投稿要求 软件版本为Photoshop CS V8.0.1(中文版) ...

  2. 【faster-rcnn】训练自己的数据——修改图片格式、类别

    修改图片格式 matlab代码 其实内部一些代码是用了rbg的fast-rcnn代码的. \datasets\VOCdevkit2007\VOCcode\VOCinit.m里面,查找'jpg',改成' ...

  3. IOS: 使用imageIO获取和修改图片的exif信息

    使用imageIO获取和修改图片的exif信息 一幅图片除了包含我们能看见的像素信息,背后还包含了拍摄时间,光圈大小,曝光等信息.UIImage类将这些细节信息都隐藏了起来,只提供我们关心的图片尺寸, ...

  4. 使用ueditor时候修改图片路径及其相关信息

    ueditor功能比较强大  使用也比较方便 但是有一些东西是需要我们自己根据实际情况去设置的 以下是关于图片/涂鸦/视频等上传信息的更改: 首先我们要找到配置文件config.json 注意不是co ...

  5. 使用Adobe Photoshop CC 2015批量修改图片尺寸

    最近在工作中遇到一个问题,当时客户给的图片尺寸与我要求的图片不符,由于图片非常的多,如果一张一张的修改,十分的麻烦,后来经过一位同事的指点,发现Adobe Photoshop CC 2015可以实现批 ...

  6. python 批量修改图片大小

    一个文件夹下面有好多图片格式是jpg大小是1920*1080,把它们处理成1280*720并按原先图片的名保存在另一路径下这里首先要找到给定路径下所有的图片文件,然后在修改图片文件的大小,这里用到PI ...

  7. kindeditor修改图片上传路径-使用webapi上传图片到图片服务器

    kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 在这里我着重介绍一些使用kindeditor修改图片上传路径并通过webapi上传图片到图片服务器的方案. 因为我使用的 ...

  8. kindeditor扩展粘贴图片功能&修改图片上传路径并通过webapi上传图片到图片服务器

    前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功 ...

  9. Ckeditor与Ckfinder的配合使用,上传图片、水印、修改图片名字为当前日期 asp.net

    为了配置出来上传功能,并且还添加水印,修改图片的名字为日期,真的头疼了很久,现在来分享一下自己所做的,也算一点小小的成就吧,顺带帮帮很多还在弄这个的猿们.我是分别用了两种方法.先说低版本的Versio ...

  10. layer.photos()异步修改图片地址后显示异常

    项目中有一个图片有预览(用的layer.photos()),需要异步修改图片地址,但是成功修改后第一次预览会显示修改前的大图,第二次以后就都正常了. 尝试修改成功后再次调用layer.photos() ...

随机推荐

  1. [中英对照]Introduction to Remote Direct Memory Access (RDMA) | RDMA概述

    前言: 什么是RDMA? 简单来说,RDMA就是指不通过操作系统(OS)内核以及TCP/IP协议栈在网络上传输数据,因此延迟(latency)非常低,CPU消耗非常少. 下面给出一篇简单介绍RDMA的 ...

  2. Win10双网卡不双待攻略

    声明:本文与个人的技术兴趣毫无关系,只是因为有迫不得已的实际需求,才不得不想办法.所谓"艰难困苦,玉汝于成",大概就是这个道理.(PS:标题我没有写错,不是双网卡双待,就是双网卡但 ...

  3. c++ 沉思录---代理类

    一.问题 如何设计一容器能包含彼此不同而又相互关联的类的对象(处于完整的继承层次的类)?因为一般的数组容器都只能包含一种类型的对象. 假设有一个表示不同类型的交通工具的类的派生层次: class Ve ...

  4. echarts 添加标线,设置颜色

    <script src="assets/js/jquery-1.8.3.min.js"></script> <!--echart图表引入js--> ...

  5. Redis---1、介绍

    Redis简介: 是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求. 优点: 对数据高并发读写 对海量数据的高效率存储和访问 对数据的可扩展性和高可用行 ...

  6. C#中区别多态、重载、重写

    重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override. 格式: 基类中: public virtual void myMethod() { } 子 ...

  7. 四、闭锁之CountDownLatch

    一.简介 闭锁是Java的一种同步工具类.我们在程序运行过程中,某个任务需要等待其它一个到多个的任务全部完成才会执行,这个等待的期间就叫做闭锁. CountDownLatch是闭锁的一种实现,它支持一 ...

  8. Druid SqlParser理解及使用入门

    以前的项目中很少去思考SQL解析这个事情,即使在saas系统或者分库分表的时候有涉及到也会有专门的处理方案,这些方案也对使用者隐藏了实现细节. 而最近的这个数据项目里面却频繁涉及到了对SQL的处理,原 ...

  9. Bash on windows从14.0升级到ubuntu16.04

    升级参考:https://www.zhihu.com/question/49411626 解决中文乱码问题参考:http://www.lofter.com/tag/ubuntu%E5%AD%90%E7 ...

  10. shell文本操作

    一.find查找命令的使用 1.find . -name "*.txt" 在当前目录下,查找以txt结尾的文件 2.find . -name "[a-z]" 在 ...