1.打开现有的图像

  1. <?php
  2. header("Content-type:image/jpeg");
  3. $img=imagecreatefromjpeg("cc.jpg");
  4. imagejpeg($img);
  5. imagedestroy($img);
  6. ?
  7.  
  8. >

函数imagecreatefromjpeg()的參数即文件所在路径。返回值是參数所指图片的资源标识符。

该函数时通过已有图像新建一个图像,并非单纯打开原图像本身。假设将图片的后缀名.jpg强制改为.png,即便是使用函数imagecreatefrompng()。也无法打开文件。由于图片本质还是jpg格式的图片。

2.获取图片的相关属性

  1. <?php
  2. $img=imagecreatefromjpeg("cc.jpg");
  3. $x=imagesx($img);
  4. $y=imagesy($img);
  5. echo "图片cc.jpg的宽为:<b>$x</b> pixels";
  6. echo "<br/>";
  7. echo "<br/>";
  8. echo "图片cc.jpg的高为:<b>$y</b> pixels";
  9. ?
  10.  
  11. >

另外,通过一个不属于GD库的函数getimagesize(),能够取得图片的大小等相关属性,该函数的语法例如以下:

array getimagesize(string $filename [, array &imageinfo])

  1. <?php
  2. $img_info=getimagesize("cc.jpg");
  3. for($i=0;$i<4;++$i)
  4. {
  5. echo $img_info[$i];
  6. echo "<br/>";
  7. }
  8. ?>

第三个元素是图片的格式,它的取值含义例如以下所看到的:

1:表示该图片是GIF格式

2:表示该图片是JPG格式

3:表示该图片是PNG格式

4:表示该图片是SWF格式

5:表示该图片是PSD格式

6:表示该图片是BMP格式

  1. <?php
  2. $pic_name="ee.png";
  3. $pic_size=getimagesize($pic_name);
  4. ?
  5.  
  6. >
  7. <img src="<?php echo $pic_name; ?
  8.  
  9. >"<?
  10.  
  11. php echo $pic_size[3]; ?>>

3.对图片加水印效果

·获取要加入水印的图片的宽、高值

·确定图片大小是否满足水印文字大小

·确定水印效果在图片中的位置

·设定图像的混色模式

·生成水印效果

·释放资源

  1. <?
  2.  
  3. php
  4. function makeimagewatermark($image,$pos,$water_text,$font_size,$color)
  5. {
  6. $font_type="c://WINDOWS//Fonts//SIMYOU.TTF";
  7. if(!empty($image)&& file_exists($image))
  8. {
  9. $img_info=getimagesize($image);
  10. $g_w=$img_info[0];
  11. $g_h=$img_info[1];
  12. switch($img_info[2])
  13. {
  14. case 1:
  15. $img=imagecreatefromgif($image);
  16. break;
  17. case 2:
  18. $img=imagecreatefromjpeg($image);
  19. break;
  20. case 3:
  21. $img=imagecreatefrompng($image);
  22. break;
  23. default:
  24. die("Format Wrong");
  25. }
  26. }
  27. else
  28. {
  29. die("Not exists!");
  30. }
  31. $temp=imagettfbbox(ceil($font_size*2.5),0,$font_type,$water_text);
  32. $w=$temp[2]-$temp[6];
  33. $h=$temp[3]-$temp[7];
  34. if(($g_w<$w) || ($g_h<$h))
  35. {
  36. echo "Too small!";
  37. return;
  38. }
  39. switch($pos)
  40. {
  41. case 0:
  42. $pos_x=rand(0,($g_w-$w));
  43. $pos_y=rand(0,($g_h-$h));
  44. break;
  45. case 1:
  46. $pos_x=0;
  47. $pos_y=0;
  48. break;
  49. case 2:
  50. $pos_x=($g_w-$w)/2;
  51. $pos_y=($g_h-$h)/2;
  52. break;
  53. case 3:
  54. $pos_x=$g_w-$w;
  55. $pos_y=$g_h-$h;
  56. break;
  57. default:
  58. $pos_x=rand(0,($g_w-$w));
  59. $pos_y=rand(0,($g_h-$h));
  60. break;
  61. }
  62. imagealphablending($img,true);//设置图像混色模式
  63.  
  64. if(!empty($color) && (strlen($color)==7))
  65. {
  66. $R=hexdec(substr($color,1,2));
  67. $G=hexdec(substr($color,3,2));
  68. $B=hexdec(substr($color,5));
  69. }
  70. else
  71. {
  72. die("Format wrong!");
  73.  
  74. }
  75. $text_color=imagecolorallocate($img,$R,$G,$B);
  76. imagettftext($img,$font_size,0,$pos_x,$pos_y,$text_color,$font_type,$water_text);
  77. switch($img_info[2])
  78. {
  79. case 1 :
  80. imagegif($img,$image);
  81. break;
  82. case 2 :
  83. imagejpeg($img,$image);
  84. break;
  85. case 3:
  86. imagepng($img,$image);
  87. break;
  88. default:
  89. die("Formate unSupport!");
  90. }
  91. imagedestroy($img);
  92. }
  93. if(isset($_FILES) && !empty($_FILES['userfile'])&& $_FILES['userfile']['size']>0)
  94. {$uploadfile="./".time()."_".$_FILES['userfile']['name'];
  95. if(copy($_FILES['userfile']['tmp_name'],$uploadfile))
  96. {
  97. makeimagewatermark($uploadfile,2,"Photo by Mac",16,"#43042A");
  98. echo "<img src=\"".$uploadfile."\" border=\"0\">";
  99. }
  100. else
  101. {
  102. echo "uploadWrong!<br/>";
  103. }
  104. }
  105. ?>
  106. <html>
  107. <head>
  108. <title>
  109. 19.9.php
  110. </title>
  111. </head>
  112. <body>
  113. <form enctype="multipart/form-data" method="POST">
  114. 选择上传图片:<input name="userfile" type="file">
  115. <input type="submit" value="上传">
  116. </form>
  117. </body>
  118. </html>

4.生成已有图片的缩略图

  1. <?
  2.  
  3. php
  4. header("Content-type:image/jpeg");
  5. $img_name="cc.jpg";
  6. $src_img=imagecreatefromjpeg($img_name);
  7. $ow=imagesx($src_img);
  8. $oh=imagesy($src_img);
  9. $nw=round($ow*200.0/$ow);
  10. $nh=round($oh*200.0/$oh);
  11. $desc_img=imagecreate($nw,$nh);
  12. imagecopyresized($desc_img,$src_img,0,0,0,0,$nw,$nh,$ow,$oh);
  13. imagejpeg($desc_img);
  14. imagedestroy($desc_img);
  15. imagedestroy($src_img);
  16. ?>

第一个和第二个參数各自是目标图像、原图像的标识符,接下来4个參数是目的图像和原图像的复制位置的坐标,最后4个參数是目的图像和原图像的复制区域的宽高。

!使用函数imagecopyresampled()函数

  1. <?php
  2. header("Content-type:image/jpeg");
  3. $img_name="cc.jpg";
  4. $percent=0.2;
  5. $src_img=imagecreatefromjpeg($img_name);
  6. $ow=imagesx($src_img);
  7. $oh=imagesy($src_img);
  8. $nw=$ow*$percent;
  9. $nh=$oh*$percent;
  10. $desc_img=imagecreatetruecolor($nw,$nh);
  11. imagecopyresampled($desc_img,$src_img,0,0,0,0,$nw,$nh,$ow,$oh);
  12. imagejpeg($desc_img);
  13. imagedestroy($desc_img);
  14. imagedestroy($src_img);
  15. ?>

版权声明:本文博客原创文章。博客,未经同意,不得转载。

PHP从零单排(十八)图像处理的更多相关文章

  1. 学好C++必须要注意的十八个问题

    转自  http://blog.chinaunix.net/uid-7396260-id-2056691.html 一.#include "filename.h"和#i nclud ...

  2. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写

    实验十八:SDRAM模块① — 单字读写 笔者与SDRAM有段不短的孽缘,它作为冤魂日夜不断纠缠笔者.笔者尝试过许多方法将其退散,不过屡试屡败的笔者,最终心情像橘子一样橙.<整合篇>之际, ...

  3. ComicEnhancerPro 系列教程十八:JPG文件长度与质量

    作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十八:JPG文件长度 ...

  4. Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能

    在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...

  5. Bootstrap <基础二十八>列表组

    列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...

  6. Bootstrap <基础十八>面包屑导航(Breadcrumbs)

    面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...

  7. 最全的MySQL基础【燕十八传世】

    1.课前准备! 开启mysql服务:1).配置环境变量;2).net start mysql 将该sql文件导入到你的数据库中,以下所有操作都是基于该数据库表操作的!!! [此笔记是本人看着视频加上自 ...

  8. Web 前端开发人员和设计师必读文章推荐【系列二十八】

    <Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  9. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十八】

    <Web 前端开发精华文章推荐>2013年第六期(总第十八期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  10. NeHe OpenGL教程 第四十八课:轨迹球

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

随机推荐

  1. 使用cm-12.0源代码编译twrp

    Select the newest branch available. This step is not necessary with Omni because Omni already includ ...

  2. AWR报告生成

    ORACLE数据库两个比較重要的问题查看报告:awrrpt.sql,ashrpt.sql 生成报告的脚本一般存放在例如以下路径: /home/TEST/db/tech_st/11.2.0/rdbms/ ...

  3. FTP文件操作之获取文件列表

    前面已经介绍了很多关于FTP对文件的操作,今天再跟大家介绍一个获取文件列表的功能.这个功能应该算是最简单的一个了,它只是获取了一下文件信息,而没有进行实质上的数据传输. 下面是是该功能的核心代码:   ...

  4. 【Web探索之旅】第三部分第一课:服务器

    内容简介 1.第三部分第一课:服务器 2.第三部分第二课预告:IP地址和域名 第三部分第一课:服务器 大家好,欢迎来到[Web探索之旅]的第三部分.这一部分有不少原理,还是很重要的. 这一部分我们会着 ...

  5. 如何区分MNO和MVNO

    MVNO(Mobile Virtaul Network Operator)虚拟网络运营商,没有自己的物理网络,租用MNO(Mobile Network Operator)网络提供的网络服务. 我们知道 ...

  6. hdu 4454 Stealing a Cake(三分之二)

    pid=4454" target="_blank" style="">题目链接:hdu 4454 Stealing a Cake 题目大意:给定 ...

  7. 【Android基础】Activity之间进行参数传递的三种方式

    1.使用Intent进行传输 //发送数据的Activity class button implements OnClickListener{ @Override public void onClic ...

  8. Android设计模式(十)--生成器模式

    回头看自己写的东西,大概Android当自己控制的定义,编写代码适用性比较高.但是,看看没有什么技术含量,因此,当在学习设计模式,想想有些东西是否可以改善,例如: 自己定义Dialog是Android ...

  9. linux内核数据包转发流程(三)网卡帧接收分析

    [版权声明:转载请保留出处:blog.csdn.net/gentleliu.邮箱:shallnew*163.com] 每一个cpu都有队列来处理接收到的帧,都有其数据结构来处理入口和出口流量,因此,不 ...

  10. Jedis连接

    Jedis连接 到场api中的jedis.我们能够发现,jedis类提供了4个构造方法.都可用于连接: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc29 ...