首页 >php教程 >php手册 >PHP学习笔记10GD图片处理

PHP学习笔记10GD图片处理

WBOY
WBOY原创
2016-07-09 09:10:351173浏览
<span style="color: #008080;">  1</span> <span style="color: #000000;">php
</span><span style="color: #008080;">  2</span>     <span style="color: #008000;">//</span><span style="color: #008000;">1. 图片背景管理</span>
<span style="color: #008080;">  3</span>         <span style="color: #008000;">/*</span><span style="color: #008000;"> imagecreatefromjpeg($filename)    从jpeg文件或者url新建一图像
</span><span style="color: #008080;">  4</span> <span style="color: #008000;">         * imagecreatefrompng($filename)    从png文件或者url新建一图象
</span><span style="color: #008080;">  5</span> <span style="color: #008000;">         * imagecreatefromgif($filename)    从gif文件或者url新建一图像
</span><span style="color: #008080;">  6</span> <span style="color: #008000;">         * 用完之后要用imagedestroy()函数进行销毁    
</span><span style="color: #008080;">  7</span> <span style="color: #008000;">         * getimagesize($filename)            返回数组,0宽1高,2类型(1GIF,2JPG,3PNG,4SWF..),3是可用于img标记的文本字符串(height="x" width="y")
</span><span style="color: #008080;">  8</span>          <span style="color: #008000;">*/</span>
<span style="color: #008080;">  9</span>         <span style="color: #008000;">//</span><span style="color: #008000;">该方法用于自动识别类型并打开图片,使用传入的func函数操作图片,vars是参数列表
</span><span style="color: #008080;"> 10</span> <span style="color: #008000;">        //如果返回的是不是原image,要在func中摧毁image</span>
<span style="color: #008080;"> 11</span>     <span style="color: #0000ff;">function</span> imagego(<span style="color: #800080;">$filename</span>, <span style="color: #800080;">$func</span>, <span style="color: #800080;">$vars</span><span style="color: #000000;">){
</span><span style="color: #008080;"> 12</span>         <span style="color: #0000ff;">list</span>(<span style="color: #800080;">$width</span>, <span style="color: #800080;">$height</span>, <span style="color: #800080;">$type</span>, <span style="color: #800080;">$attr</span>) = <span style="color: #008080;">getimagesize</span>(<span style="color: #800080;">$filename</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 13</span>         <span style="color: #800080;">$types</span> = <span style="color: #0000ff;">array</span>(1=>"gif", 2=>"jpeg", 3=>"png"<span style="color: #000000;">);
</span><span style="color: #008080;"> 14</span>         <span style="color: #008000;">//</span><span style="color: #008000;">组合创建图像函数名</span>
<span style="color: #008080;"> 15</span>         <span style="color: #800080;">$createfrom</span> = "imagecreatefrom".<span style="color: #800080;">$types</span>{<span style="color: #800080;">$type</span><span style="color: #000000;">};
</span><span style="color: #008080;"> 16</span>         <span style="color: #800080;">$image</span> = <span style="color: #800080;">$createfrom</span>(<span style="color: #800080;">$filename</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 17</span>         <span style="color: #008000;">//</span><span style="color: #008000;">对该图片进行操作</span>
<span style="color: #008080;"> 18</span>         <span style="color: #800080;">$image</span> = <span style="color: #800080;">$func</span>(<span style="color: #800080;">$image</span>, <span style="color: #800080;">$width</span>, <span style="color: #800080;">$height</span>, <span style="color: #800080;">$type</span>, <span style="color: #800080;">$vars</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 19</span>         <span style="color: #008000;">//</span><span style="color: #008000;">组合输出图像函数名</span>
<span style="color: #008080;"> 20</span>         <span style="color: #800080;">$output</span> = "image".<span style="color: #800080;">$types</span>{<span style="color: #800080;">$type</span><span style="color: #000000;">};
</span><span style="color: #008080;"> 21</span>         <span style="color: #800080;">$filename_s</span> = <span style="color: #008080;">preg_split</span>("/\\./", <span style="color: #800080;">$filename</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 22</span>         <span style="color: #800080;">$filename</span> = <span style="color: #800080;">$filename_s</span>{0}."_${func}.".<span style="color: #800080;">$filename_s</span>{1<span style="color: #000000;">};
</span><span style="color: #008080;"> 23</span>         <span style="color: #800080;">$output</span>(<span style="color: #800080;">$image</span>, <span style="color: #800080;">$filename</span><span style="color: #000000;">); 
</span><span style="color: #008080;"> 24</span>         
<span style="color: #008080;"> 25</span>         imagedestroy(<span style="color: #800080;">$image</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 26</span> <span style="color: #000000;">    }
</span><span style="color: #008080;"> 27</span>         <span style="color: #008000;">//</span><span style="color: #008000;">该方法用于在图片上加上字符串,传入一个参数表示添加的字符串</span>
<span style="color: #008080;"> 28</span>     <span style="color: #0000ff;">function</span> imageaddstring(<span style="color: #800080;">$image</span>, <span style="color: #800080;">$width</span>, <span style="color: #800080;">$height</span>, <span style="color: #800080;">$type</span>, <span style="color: #800080;">$vars</span><span style="color: #000000;">){
</span><span style="color: #008080;"> 29</span>         <span style="color: #800080;">$string</span> = <span style="color: #800080;">$vars</span>{0<span style="color: #000000;">};
</span><span style="color: #008080;"> 30</span>         <span style="color: #800080;">$sx</span> = (<span style="color: #800080;">$width</span> - imagefontwidth(5)*<span style="color: #008080;">strlen</span>(<span style="color: #800080;">$string</span>))/2<span style="color: #000000;">;
</span><span style="color: #008080;"> 31</span>         <span style="color: #800080;">$sy</span> = (<span style="color: #800080;">$height</span> - imagefontheight(5))/2<span style="color: #000000;">;
</span><span style="color: #008080;"> 32</span>         <span style="color: #800080;">$textcolor</span> = imagecolorallocate(<span style="color: #800080;">$image</span>, 255, 0, 0<span style="color: #000000;">);
</span><span style="color: #008080;"> 33</span>         imagestring(<span style="color: #800080;">$image</span>, 5, <span style="color: #800080;">$sx</span>, <span style="color: #800080;">$sy</span>, <span style="color: #800080;">$string</span>, <span style="color: #800080;">$textcolor</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 34</span>         <span style="color: #0000ff;">return</span> <span style="color: #800080;">$image</span><span style="color: #000000;">;
</span><span style="color: #008080;"> 35</span> <span style="color: #000000;">    }
</span><span style="color: #008080;"> 36</span>     imagego("img/1.jpg", "imageaddstring", <span style="color: #0000ff;">array</span>("Add a string on JPEG"<span style="color: #000000;">));
</span><span style="color: #008080;"> 37</span>     imagego("img/2.gif", "imageaddstring", <span style="color: #0000ff;">array</span>("Add a string on GIF"<span style="color: #000000;">));
</span><span style="color: #008080;"> 38</span>     imagego("img/3.png", "imageaddstring", <span style="color: #0000ff;">array</span>("Add a string on PNG"<span style="color: #000000;">));
</span><span style="color: #008080;"> 39</span>     
<span style="color: #008080;"> 40</span>     <span style="color: #008000;">//</span><span style="color: #008000;">2. 图片缩放与裁剪处理</span>
<span style="color: #008080;"> 41</span>         <span style="color: #008000;">/*</span><span style="color: #008000;"> imagecopyresized
</span><span style="color: #008080;"> 42</span> <span style="color: #008000;">         * imagecopyresampled($dst_img.$src_img,$dst_x,$dst_y,$src_x,$src_y,$dst_w,$dst_h,$src_w,$src_h)    
</span><span style="color: #008080;"> 43</span> <span style="color: #008000;">         * 以上两个函数都可以进行图片缩放,后者效果好一些.该函数可以在图像内部复制,但当区域重复时后果不可知
</span><span style="color: #008080;"> 44</span> <span style="color: #008000;">         * 如果源和目标的高宽不一样,则会自动进行缩放.
</span><span style="color: #008080;"> 45</span> <span style="color: #008000;">         * 同时,该函数也可以实现图像的裁剪.
</span><span style="color: #008080;"> 46</span>          <span style="color: #008000;">*/</span>
<span style="color: #008080;"> 47</span>         <span style="color: #008000;">//</span><span style="color: #008000;">该方法用于缩小图片1.5倍</span>
<span style="color: #008080;"> 48</span>     <span style="color: #0000ff;">function</span> imagethumb(<span style="color: #800080;">$image</span>, <span style="color: #800080;">$width</span>, <span style="color: #800080;">$height</span>, <span style="color: #800080;">$type</span>, <span style="color: #800080;">$vars</span><span style="color: #000000;">){
</span><span style="color: #008080;"> 49</span>         <span style="color: #800080;">$p</span> = <span style="color: #800080;">$vars</span>{0<span style="color: #000000;">};
</span><span style="color: #008080;"> 50</span>         <span style="color: #800080;">$n_image</span> = imagecreatetruecolor(<span style="color: #800080;">$width</span>/<span style="color: #800080;">$p</span>, <span style="color: #800080;">$height</span>/<span style="color: #800080;">$p</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 51</span>         imagecopyresampled(<span style="color: #800080;">$n_image</span>, <span style="color: #800080;">$image</span>, 0, 0, 0, 0, <span style="color: #800080;">$width</span>/<span style="color: #800080;">$p</span>, <span style="color: #800080;">$height</span>/<span style="color: #800080;">$p</span>, <span style="color: #800080;">$width</span>, <span style="color: #800080;">$height</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 52</span>         imagedestroy(<span style="color: #800080;">$image</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 53</span>         <span style="color: #0000ff;">return</span> <span style="color: #800080;">$n_image</span><span style="color: #000000;">;
</span><span style="color: #008080;"> 54</span> <span style="color: #000000;">    }
</span><span style="color: #008080;"> 55</span>     imagego("img/1.jpg", "imagethumb", <span style="color: #0000ff;">array</span>(1.5<span style="color: #000000;">));
</span><span style="color: #008080;"> 56</span>     imagego("img/2.gif", "imagethumb", <span style="color: #0000ff;">array</span>(1.5<span style="color: #000000;">));
</span><span style="color: #008080;"> 57</span>     imagego("img/3.png", "imagethumb", <span style="color: #0000ff;">array</span>(1.5<span style="color: #000000;">));
</span><span style="color: #008080;"> 58</span>         <span style="color: #008000;">//</span><span style="color: #008000;">该方法用于实现图片的裁剪</span>
<span style="color: #008080;"> 59</span>     <span style="color: #0000ff;">function</span> imagecut(<span style="color: #800080;">$image</span>, <span style="color: #800080;">$width</span>, <span style="color: #800080;">$height</span>, <span style="color: #800080;">$type</span>, <span style="color: #800080;">$vars</span><span style="color: #000000;">) {
</span><span style="color: #008080;"> 60</span>         <span style="color: #800080;">$n_x</span> = <span style="color: #800080;">$vars</span>{0<span style="color: #000000;">};
</span><span style="color: #008080;"> 61</span>         <span style="color: #800080;">$n_y</span> = <span style="color: #800080;">$vars</span>{1<span style="color: #000000;">};
</span><span style="color: #008080;"> 62</span>         <span style="color: #800080;">$n_width</span> = <span style="color: #800080;">$vars</span>{2<span style="color: #000000;">};
</span><span style="color: #008080;"> 63</span>         <span style="color: #800080;">$n_height</span> = <span style="color: #800080;">$vars</span>{3<span style="color: #000000;">};
</span><span style="color: #008080;"> 64</span> 
<span style="color: #008080;"> 65</span>         <span style="color: #800080;">$n_image</span> = imagecreatetruecolor(<span style="color: #800080;">$n_width</span>, <span style="color: #800080;">$n_height</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 66</span>         imagecopyresampled(<span style="color: #800080;">$n_image</span>, <span style="color: #800080;">$image</span>, 0, 0, <span style="color: #800080;">$n_x</span>, <span style="color: #800080;">$n_y</span>, <span style="color: #800080;">$n_width</span>, <span style="color: #800080;">$n_height</span>, <span style="color: #800080;">$n_width</span>, <span style="color: #800080;">$n_height</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 67</span>         imagedestroy(<span style="color: #800080;">$image</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 68</span>         <span style="color: #0000ff;">return</span> <span style="color: #800080;">$n_image</span><span style="color: #000000;">;
</span><span style="color: #008080;"> 69</span> <span style="color: #000000;">    }
</span><span style="color: #008080;"> 70</span>     imagego("img/1.jpg", "imagecut", <span style="color: #0000ff;">array</span>(200, 100, 100, 100<span style="color: #000000;">));
</span><span style="color: #008080;"> 71</span>     imagego("img/2.gif", "imagecut", <span style="color: #0000ff;">array</span>(200, 100, 100, 100<span style="color: #000000;">));
</span><span style="color: #008080;"> 72</span>     imagego("img/3.png", "imagecut", <span style="color: #0000ff;">array</span>(200, 100, 100, 100<span style="color: #000000;">));
</span><span style="color: #008080;"> 73</span>     
<span style="color: #008080;"> 74</span>     <span style="color: #008000;">//</span><span style="color: #008000;">3. 添加图片水印</span>
<span style="color: #008080;"> 75</span>         <span style="color: #008000;">/*</span><span style="color: #008000;"> imagecopy($dst_img,$src_img,$dst_x,$dst_y,$src_x,$src_y,$src_w,$src_h)
</span><span style="color: #008080;"> 76</span> <span style="color: #008000;">         * 将一个图片复制到另一个图片上面
</span><span style="color: #008080;"> 77</span>          <span style="color: #008000;">*/</span>
<span style="color: #008080;"> 78</span>     <span style="color: #0000ff;">function</span> watermark(<span style="color: #800080;">$image</span>, <span style="color: #800080;">$width</span>, <span style="color: #800080;">$height</span>, <span style="color: #800080;">$type</span>, <span style="color: #800080;">$vars</span><span style="color: #000000;">){
</span><span style="color: #008080;"> 79</span>         <span style="color: #800080;">$w_image</span> = imagecreatefrompng("img/logo.png"<span style="color: #000000;">);
</span><span style="color: #008080;"> 80</span>         <span style="color: #0000ff;">list</span>(<span style="color: #800080;">$src_w</span>, <span style="color: #800080;">$src_h</span>) = <span style="color: #008080;">getimagesize</span>("img/logo.png"<span style="color: #000000;">);
</span><span style="color: #008080;"> 81</span>         imagecopy(<span style="color: #800080;">$image</span>, <span style="color: #800080;">$w_image</span>, <span style="color: #800080;">$vars</span>{0}, <span style="color: #800080;">$vars</span>{1}, 0, 0, <span style="color: #800080;">$src_w</span>, <span style="color: #800080;">$src_h</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 82</span>         imagedestroy(<span style="color: #800080;">$w_image</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 83</span>         <span style="color: #0000ff;">return</span> <span style="color: #800080;">$image</span><span style="color: #000000;">;
</span><span style="color: #008080;"> 84</span> <span style="color: #000000;">    }
</span><span style="color: #008080;"> 85</span>     imagego("img/1.jpg", "watermark", <span style="color: #0000ff;">array</span>(50,50<span style="color: #000000;">));
</span><span style="color: #008080;"> 86</span>     imagego("img/2.gif", "watermark", <span style="color: #0000ff;">array</span>(100,100<span style="color: #000000;">));
</span><span style="color: #008080;"> 87</span>     imagego("img/3.png", "watermark", <span style="color: #0000ff;">array</span>(150,150<span style="color: #000000;">));
</span><span style="color: #008080;"> 88</span>     
<span style="color: #008080;"> 89</span>     <span style="color: #008000;">//</span><span style="color: #008000;">4. 图片的选装和翻转</span>
<span style="color: #008080;"> 90</span>         <span style="color: #008000;">/*</span><span style="color: #008000;"> imagerotate($src,$degree,$bgcolor,[ignore transparent])    可选参数是否忽视透明色,返回旋转后的图片
</span><span style="color: #008080;"> 91</span> <span style="color: #008000;">         * 翻转用imagecopy按像素行或者像素列复制就可以了
</span><span style="color: #008080;"> 92</span> <span style="color: #008000;">         * 下面的函数先旋转再翻转
</span><span style="color: #008080;"> 93</span>          <span style="color: #008000;">*/</span>
<span style="color: #008080;"> 94</span>     <span style="color: #0000ff;">function</span> rotateandturn(<span style="color: #800080;">$image</span>, <span style="color: #800080;">$width</span>, <span style="color: #800080;">$height</span>, <span style="color: #800080;">$type</span>, <span style="color: #800080;">$vars</span><span style="color: #000000;">) {
</span><span style="color: #008080;"> 95</span>         <span style="color: #800080;">$angle</span> = <span style="color: #800080;">$vars</span>{0<span style="color: #000000;">};
</span><span style="color: #008080;"> 96</span>         <span style="color: #800080;">$image</span> = imagerotate(<span style="color: #800080;">$image</span>, <span style="color: #800080;">$angle</span>, 0<span style="color: #000000;">);
</span><span style="color: #008080;"> 97</span>         <span style="color: #008000;">//</span><span style="color: #008000;">选装后图片大小可能发生变化</span>
<span style="color: #008080;"> 98</span>         <span style="color: #800080;">$width</span> = imagesx(<span style="color: #800080;">$image</span><span style="color: #000000;">);
</span><span style="color: #008080;"> 99</span>         <span style="color: #800080;">$height</span> = imagesy(<span style="color: #800080;">$image</span><span style="color: #000000;">);
</span><span style="color: #008080;">100</span>         <span style="color: #800080;">$n_image</span> = imagecreatetruecolor(<span style="color: #800080;">$width</span>, <span style="color: #800080;">$height</span><span style="color: #000000;">);
</span><span style="color: #008080;">101</span>         <span style="color: #008000;">//</span><span style="color: #008000;">1代表x轴翻转,2代表y轴翻转,0代表不翻转</span>
<span style="color: #008080;">102</span>         <span style="color: #0000ff;">if</span> (<span style="color: #800080;">$vars</span>{1} == 1<span style="color: #000000;">) {
</span><span style="color: #008080;">103</span>             <span style="color: #0000ff;">for</span> (<span style="color: #800080;">$x</span> = 0; <span style="color: #800080;">$x</span> $width; <span style="color: #800080;">$x</span>++<span style="color: #000000;">) {
</span><span style="color: #008080;">104</span>                 imagecopy(<span style="color: #800080;">$n_image</span>, <span style="color: #800080;">$image</span>, <span style="color: #800080;">$x</span>, 0, <span style="color: #800080;">$width</span>-<span style="color: #800080;">$x</span>-1, 0, 1, <span style="color: #800080;">$height</span><span style="color: #000000;">);
</span><span style="color: #008080;">105</span> <span style="color: #000000;">            }
</span><span style="color: #008080;">106</span>         } <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> (<span style="color: #800080;">$vars</span>{1} == 2<span style="color: #000000;">){
</span><span style="color: #008080;">107</span>             <span style="color: #0000ff;">for</span> (<span style="color: #800080;">$x</span> = 0; <span style="color: #800080;">$x</span> $height; <span style="color: #800080;">$x</span>++<span style="color: #000000;">) {
</span><span style="color: #008080;">108</span>                 imagecopy(<span style="color: #800080;">$n_image</span>, <span style="color: #800080;">$image</span>, 0, <span style="color: #800080;">$x</span>, 0, <span style="color: #800080;">$height</span>-<span style="color: #800080;">$x</span>-1, <span style="color: #800080;">$width</span>, 1<span style="color: #000000;">);
</span><span style="color: #008080;">109</span> <span style="color: #000000;">            }    
</span><span style="color: #008080;">110</span>         } <span style="color: #0000ff;">else</span><span style="color: #000000;"> {
</span><span style="color: #008080;">111</span>             imagecopy(<span style="color: #800080;">$n_image</span>, <span style="color: #800080;">$image</span>, 0, 0, 0, 0, <span style="color: #800080;">$width</span>, <span style="color: #800080;">$height</span><span style="color: #000000;">);
</span><span style="color: #008080;">112</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">113</span>         
<span style="color: #008080;">114</span>         imagedestroy(<span style="color: #800080;">$image</span><span style="color: #000000;">);
</span><span style="color: #008080;">115</span>         <span style="color: #0000ff;">return</span> <span style="color: #800080;">$n_image</span><span style="color: #000000;">;
</span><span style="color: #008080;">116</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">117</span>     imagego("img/1.jpg", "rotateandturn", <span style="color: #0000ff;">array</span>(10, 0<span style="color: #000000;">));
</span><span style="color: #008080;">118</span>     imagego("img/2.gif", "rotateandturn", <span style="color: #0000ff;">array</span>(0,1<span style="color: #000000;">));
</span><span style="color: #008080;">119</span>     imagego("img/3.png", "rotateandturn", <span style="color: #0000ff;">array</span>(10,2<span style="color: #000000;">));
</span><span style="color: #008080;">120</span> ?>
<span style="color: #008080;">121</span> 
<span style="color: #008080;">122</span>     
<span style="color: #008080;">123</span>         原图<br>
<span style="color: #008080;">124</span>         <img alt="" src="img/1.jpg"><img alt="" src="img/2.gif"><img alt="" src="img/3.png">
<span style="color: #008080;">125</span>         <br>图中添加字符串<br>
<span style="color: #008080;">126</span>         <img alt="" src="img/1_imageaddstring.jpg"><img alt="" src="img/2_imageaddstring.gif"><img alt="" src="img/3_imageaddstring.png">
<span style="color: #008080;">127</span>         <br>图片缩放<br>
<span style="color: #008080;">128</span>         <img alt="" src="img/1_imagethumb.jpg"><img alt="" src="img/2_imagethumb.gif"><img alt="" src="img/3_imagethumb.png">
<span style="color: #008080;">129</span>         <br>图片裁剪<br>
<span style="color: #008080;">130</span>         <img alt="" src="img/1_imagecut.jpg"><img alt="" src="img/2_imagecut.gif"><img alt="" src="img/3_imagecut.png">
<span style="color: #008080;">131</span>         <br>图片水印<br>
<span style="color: #008080;">132</span>         <img alt="" src="img/1_watermark.jpg"><img alt="" src="img/2_watermark.gif"><img alt="" src="img/3_watermark.png">
<span style="color: #008080;">133</span>         <br>图片旋转和翻转<br>
<span style="color: #008080;">134</span>         <img alt="" src="img/1_rotateandturn.jpg"><img alt="" src="img/2_rotateandturn.gif"><img alt="" src="img/3_rotateandturn.png">
<span style="color: #008080;">135</span>         
<span style="color: #008080;">136</span>     
<span style="color: #008080;">137</span> 


执行结果

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn