PHP的GD扩展提供了两个函数来缩放图像:
<span lang="EN-US">ImageCopyResized(<tt><em>dest</em></tt>, <tt><em>src</em></tt>, <tt><em>dx</em></tt>, <tt><em>dy</em></tt>, <tt><em>sx</em></tt>, <tt><em>sy</em></tt>, <tt><em>dw</em></tt>, <tt><em>dh</em></tt>, <tt><em>sw</em></tt>, <tt><em>sh</em></tt>);<br>ImageCopyResampled(<tt><em>dest</em></tt>, <tt><em>src</em></tt>, <tt><em>dx</em></tt>, <tt><em>dy</em></tt>, <tt><em>sx</em></tt>, <tt><em>sy</em></tt>, <tt><em>dw</em></tt>, <tt><em>dh</em></tt>, <tt><em>sw</em></tt>, <tt><em>sh</em></tt>);</span> <br>
<span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,119,0)"><span style="COLOR: rgb(0,0,0)">
<p><code><span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,119,0)"><span style="COLOR: rgb(0,0,0)"></span></span></span>
<span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,119,0)"><span style="COLOR: rgb(0,0,0)"></span></span></span>
ImageCopyResize( ) 関数はすべての GD バージョンで動作しますが、そのスケーリングは画像のアルゴリズムは比較的粗く、画像のエッジがギザギザになる場合があります。 GD 2.x には新しい ImageCopyResampled( ) 関数があり、ピクセル補間アルゴリズムによって取得された画像のエッジは比較的滑らかです (ただし、この関数は ImageCopyResize()遅い)。<span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,0,187)"><?php <br><br> $src </SPAN><SPAN style="COLOR: rgb(0,119,0)">= </SPAN><SPAN style="COLOR: rgb(0,0,187)">ImageCreateFromJPEG</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(221,0,0)">'php.jpg'</SPAN><SPAN style="COLOR: rgb(0,119,0)">); <br><br> </SPAN><SPAN style="COLOR: rgb(0,0,187)">$width </SPAN><SPAN style="COLOR: rgb(0,119,0)">= </SPAN><SPAN style="COLOR: rgb(0,0,187)">ImageSx</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(0,0,187)">$src</SPAN><SPAN style="COLOR: rgb(0,119,0)">); <BR> </SPAN><SPAN style="COLOR: rgb(0,0,187)">$height </SPAN><SPAN style="COLOR: rgb(0,119,0)">= </SPAN><SPAN style="COLOR: rgb(0,0,187)">ImageSy</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(0,0,187)">$src</SPAN><SPAN style="COLOR: rgb(0,119,0)">); <BR> </SPAN><SPAN style="COLOR: rgb(0,0,187)">$x </SPAN><SPAN style="COLOR: rgb(0,119,0)">= </SPAN><SPAN style="COLOR: rgb(0,0,187)">$width</SPAN><SPAN style="COLOR: rgb(0,119,0)">/</SPAN><SPAN style="COLOR: rgb(0,0,187)">2</SPAN><SPAN style="COLOR: rgb(0,119,0)">; </SPAN><SPAN style="COLOR: rgb(0,0,187)">$y </SPAN><SPAN style="COLOR: rgb(0,119,0)">= </SPAN><SPAN style="COLOR: rgb(0,0,187)">$height</SPAN><SPAN style="COLOR: rgb(0,119,0)">/</SPAN><SPAN style="COLOR: rgb(0,0,187)">2</SPAN><SPAN style="COLOR: rgb(0,119,0)">; <BR> </SPAN><SPAN style="COLOR: rgb(0,0,187)">$dst </SPAN><SPAN style="COLOR: rgb(0,119,0)">= </SPAN><SPAN style="COLOR: rgb(0,0,187)">ImageCreateTrueColor</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(0,0,187)">$x</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,187)">$y</SPAN><SPAN style="COLOR: rgb(0,119,0)">); <BR> </SPAN><SPAN style="COLOR: rgb(0,0,187)">ImageCopyResized</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(0,0,187)">$dst</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,187)">$src</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,187)">0</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,187)">0</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,187)">0</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,187)">0</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,187)">$x</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,187)">$y</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,187)">$width</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,187)">$height</SPAN><SPAN style="COLOR: rgb(0,119,0)">); <BR> </SPAN><SPAN style="COLOR: rgb(255,128,0)">//ImageCopyResampled($dst,$src,0,0,0,0,$x,$y,$width,$height); <br><br> </SPAN><SPAN style="COLOR: rgb(0,0,187)">header</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(221,0,0)">'Content-Type: image/jpeg'</SPAN><SPAN style="COLOR: rgb(0,119,0)">); <BR> </SPAN><SPAN style="COLOR: rgb(0,0,187)">ImageJPEG</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(0,0,187)">$dst</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(221,0,0)">''</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,187)">100</SPAN><SPAN style="COLOR: rgb(0,119,0)">); <BR></SPAN><SPAN style="COLOR: rgb(0,0,187)">?></span> <br><br>原图:<br><br><br>使用</span>
<span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,119,0)"></span><span style="COLOR: rgb(0,0,187)">ImageCopyResized</span><span style="COLOR: rgb(0,119,0)">()<span style="COLOR: rgb(0,0,0)">函数生成的结果:<br><br><br><br></span></span></span>
<span style="COLOR: rgb(0,0,0)">使用</span>
<SPAN style="COLOR: rgb(0,0,0)"><SPAN style="COLOR: rgb(0,119,0)"></SPAN><SPAN style="COLOR: rgb(0,0,187)">ImageCopyResampled</SPAN><SPAN style="COLOR: rgb(0,119,0)">()<SPAN style="COLOR: rgb(0,0,0)">函数生成的结果:</SPAN></SPAN></SPAN> <SPAN style="COLOR: rgb(0,0,0)"><SPAN style="COLOR: rgb(0,119,0)"><SPAN style="COLOR: rgb(0,0,0)"><BR></SPAN><BR></SPAN><SPAN style="COLOR: rgb(0,0,187)"></SPAN></SPAN>
$src ImageCreateFromJPEG<SPAN style="COLOR: rgb(0,0,0)"><SPAN style="COLOR: rgb(0,0,187)">(</SPAN><SPAN style="COLOR: rgb(221,0,0)">'php.jpg '<SPAN style="COLOR: rgb(0,119,0)"><SPAN style="COLOR: rgb(0,0,0)">); <🎜><🎜> <🎜><🎜>$width <🎜><🎜>= <🎜><🎜>ImageSx<🎜><🎜>(<🎜><🎜> $src<🎜><🎜>); <🎜> <🎜><🎜>$height <🎜><🎜>= <🎜><🎜>ImageSy<🎜><🎜>(<🎜><🎜>$src <🎜><🎜>); <🎜> <🎜><🎜>$x <🎜><🎜>= <🎜><🎜>$width<🎜><🎜>/<🎜><🎜>2<🎜 ><🎜>; 🎜> <🎜><🎜>$dst <🎜><🎜>= <🎜><🎜>ImageCreateTrueColor<🎜><🎜>(<🎜><🎜>$x<🎜><🎜> ,<🎜>< 🎜>$y<🎜><🎜>); <🎜> <🎜><🎜>ImageCopyResize<🎜><🎜>(<🎜><🎜>$dst<🎜><🎜>,< 🎜><🎜> $src<🎜><🎜>,<🎜><🎜>0<🎜><🎜>,<🎜><🎜>0<🎜><🎜>,<🎜><🎜>0< 🎜><🎜>、<🎜><🎜>0<🎜><🎜>、<🎜><🎜>$x<🎜><🎜>、<🎜><🎜>$y<🎜><🎜>、 <🎜><🎜 >$width<🎜><🎜>,<🎜><🎜>$height<🎜><🎜>); <🎜> <🎜><SPAN style="COLOR: rgb(255,128,0) ">//ImageCopyResampled ($dst,$src,0,0,0,0,$x,$y,$width,$height); <🎜><🎜> <🎜><🎜>ヘッダー<🎜>< 🎜>(<🎜 ><SPAN style="COLOR: rgb(221,0,0)">'Content-Type: image/jpeg'<🎜><🎜>); <🎜><🎜 >(<🎜><🎜>$dst<🎜><🎜>,<🎜><SPAN style="COLOR: rgb(221,0,0)">''<🎜><🎜> ,<🎜>< 🎜>100<🎜><🎜>); <🎜><🎜><🎜>?> 元の画像: を使用 CODE>ImageCopyResize()関数によって生成された結果: を使用しますImageCopyResampled() 関数によって生成された結果: 2 つの関数によって生成される画像効果が異なることは明らかです。ImageCopyResampled()関数によって生成された結果はよりスムーズで、より良い効果をもたらします。<br><br><code><span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,119,0)"><span style="COLOR: rgb(0,0,0)"><code><span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,119,0)"><span style="COLOR: rgb(0,0,0)"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><font size="2">顺便贴一个效果,用ASCII表示图像。ImageColorAt()有一个很有趣的用处,它可以循环检查<br></font><font size="2">图像中的每一个像素的颜色,然后对该颜色数据进行操作。</font></pre><div class="contentsignin">ログイン後にコピー</div></div>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><font face="宋体" size="2"><span style="FONT-SIZE: 12pt">源代码:<br></span></font><font face="Courier New"><html></font></pre><div class="contentsignin">ログイン後にコピー</div></div>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><font face="Courier New"><body bgcolor="#000000" style="line-height:6pt"> </font><font face="Courier New"><span style="COLOR: rgb(0,0,187)"><?php <BR> $im </SPAN><SPAN style="COLOR: rgb(0,119,0)">= </SPAN><SPAN style="COLOR: rgb(0,0,187)">imagecreatefromjpeg</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(221,0,0)">'test1.jpg'</SPAN></FONT><FONT face="Courier New"><SPAN style="COLOR: rgb(0,119,0)">); <BR> </SPAN><SPAN style="COLOR: rgb(0,0,187)">$dx </SPAN><SPAN style="COLOR: rgb(0,119,0)">= </SPAN><SPAN style="COLOR: rgb(0,0,187)">imagesx</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(0,0,187)">$im</SPAN></FONT><FONT face="Courier New"><SPAN style="COLOR: rgb(0,119,0)">); <BR> </SPAN><SPAN style="COLOR: rgb(0,0,187)">$dy </SPAN><SPAN style="COLOR: rgb(0,119,0)">= </SPAN><SPAN style="COLOR: rgb(0,0,187)">imagesy</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(0,0,187)">$im</SPAN></FONT><FONT face="Courier New"><SPAN style="COLOR: rgb(0,119,0)">); <BR> for(</SPAN><SPAN style="COLOR: rgb(0,0,187)">$y </SPAN><SPAN style="COLOR: rgb(0,119,0)">= </SPAN><SPAN style="COLOR: rgb(0,0,187)">0</SPAN><SPAN style="COLOR: rgb(0,119,0)">; </SPAN><SPAN style="COLOR: rgb(0,0,187)">$y </SPAN><SPAN style="COLOR: rgb(0,119,0)">< </SPAN><SPAN style="COLOR: rgb(0,0,187)">$dy</SPAN><SPAN style="COLOR: rgb(0,119,0)">; </SPAN><SPAN style="COLOR: rgb(0,0,187)">$y</SPAN></FONT><FONT face="Courier New"><SPAN style="COLOR: rgb(0,119,0)">++) { <BR> for(</SPAN><SPAN style="COLOR: rgb(0,0,187)">$x</SPAN><SPAN style="COLOR: rgb(0,119,0)">=</SPAN><SPAN style="COLOR: rgb(0,0,187)">0</SPAN><SPAN style="COLOR: rgb(0,119,0)">; </SPAN><SPAN style="COLOR: rgb(0,0,187)">$x </SPAN><SPAN style="COLOR: rgb(0,119,0)">< </SPAN><SPAN style="COLOR: rgb(0,0,187)">$dx</SPAN><SPAN style="COLOR: rgb(0,119,0)">; </SPAN><SPAN style="COLOR: rgb(0,0,187)">$x</SPAN></FONT><FONT face="Courier New"><SPAN style="COLOR: rgb(0,119,0)">++) { <BR> </SPAN><SPAN style="COLOR: rgb(0,0,187)">$col </SPAN><SPAN style="COLOR: rgb(0,119,0)">= </SPAN><SPAN style="COLOR: rgb(0,0,187)">imagecolorat</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(0,0,187)">$im</SPAN><SPAN style="COLOR: rgb(0,119,0)">, </SPAN><SPAN style="COLOR: rgb(0,0,187)">$x</SPAN><SPAN style="COLOR: rgb(0,119,0)">, </SPAN><SPAN style="COLOR: rgb(0,0,187)">$y</SPAN></FONT><FONT face="Courier New"><SPAN style="COLOR: rgb(0,119,0)">); <BR> </SPAN><SPAN style="COLOR: rgb(0,0,187)">$rgb </SPAN><SPAN style="COLOR: rgb(0,119,0)">= </SPAN><SPAN style="COLOR: rgb(0,0,187)">imagecolorsforindex</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(0,0,187)">$im</SPAN><SPAN style="COLOR: rgb(0,119,0)">,</SPAN><SPAN style="COLOR: rgb(0,0,187)">$col</SPAN></FONT><FONT face="Courier New"><SPAN style="COLOR: rgb(0,119,0)">); <BR> </SPAN><SPAN style="COLOR: rgb(0,0,187)">printf</SPAN><SPAN style="COLOR: rgb(0,119,0)">(</SPAN><SPAN style="COLOR: rgb(221,0,0)">'<font color=#%02x%02x%02x>*</font>'</span></font><font face="Courier New"><span style="COLOR: rgb(0,119,0)">, <br> </span><span style="COLOR: rgb(0,0,187)">$rgb</span><span style="COLOR: rgb(0,119,0)">[</span><span style="COLOR: rgb(221,0,0)">'red'</span><span style="COLOR: rgb(0,119,0)">],</span><span style="COLOR: rgb(0,0,187)">$rgb</span><span style="COLOR: rgb(0,119,0)">[</span><span style="COLOR: rgb(221,0,0)">'green'</span><span style="COLOR: rgb(0,119,0)">],</span><span style="COLOR: rgb(0,0,187)">$rgb</span><span style="COLOR: rgb(0,119,0)">[</span><span style="COLOR: rgb(221,0,0)">'blue'</span></font><font face="Courier New"><span style="COLOR: rgb(0,119,0)">]); <br> } <br> echo </span><span style="COLOR: rgb(221,0,0)">"<br>\n"</span></font><font face="Courier New"><span style="COLOR: rgb(0,119,0)">; <br> } <br> </span><span style="COLOR: rgb(0,0,187)">imagedestroy</span><span style="COLOR: rgb(0,119,0)">(</span><span style="COLOR: rgb(0,0,187)">$im</span></font><span style="COLOR: rgb(0,119,0)"><font face="Courier New">); <br></font></span><font face="Courier New"><span style="COLOR: rgb(0,0,187)">?> <br></span></body></html> </font></pre><div class="contentsignin">ログイン後にコピー</div></div>
<p><br></p>
<p></p></span></span></span>
很有趣吧,呵呵..