PHP圖片處理之圖片背景、畫布操做

像驗證碼或根據動態數據生成統計圖標,以及前面介紹的一些GD庫操做等都屬於動態繪製圖像。而在web開發中,也會常常去處理服務器中已存在的圖片。例如,根據一些需求對圖片進行縮放、加水印、裁剪、翻轉和旋轉等改圖的操做。在web應用中,常常使用的圖片格式有GIF、JPEG和PNG中的一種或幾種,固然GD庫也能夠處理其餘格式的圖片,但都不多用到。因此安裝GD庫時,至少安裝GIF、JPEG或PNG三種格式中的一種。php

  在前面介紹的畫布管理中,使用imagecreate()和imageCreateTrueColor()兩個函數去建立畫布資源。但若是須要對本身已有的圖片進行處理,只要將這個圖片做爲畫布資源便可,也就是咱們所說的建立圖片背景。能夠經過下面介紹的幾個函數,打開服務器或網絡文件中已經存在的GIF、JPEG和PNG圖像,返回一個圖像標識符,表明了從給定的文件名取得的圖像做爲操做的背景資源。它們的原型以下所示,它們在失敗時都會返回一個空字符串,而且輸出一條錯誤信息。web

 

複製代碼代碼以下:

  resource  imagecreatefromjpeg(string $filename)           //從JPEG文件或URL新建一圖像
  resource  imagecreatefrompng(string $filename)             //從PNG文件或URL新建一圖像
  resource  imagecreatefromgif(string $filename)            //從GIF文件或URL新建一圖像

 

  無論使用哪一個函數建立的圖像資源,用完之後都須要使用imagedestroy()函數進行銷燬。再有就是圖片格式對應的問題,任何一種方式打開的圖片資源均可以保存爲同一種格式。例如,對於使用imagecreatefromjpeg()函數建立的圖片資源,可使用imagepng()函數以PNG格式將圖像輸出到瀏覽器或文件。固然最好是打開的是哪一種格式的圖片,就保存成對應的圖片格式。若是要作到這一點,咱們還須要先認識一下getimagesize()函數,經過圖片名稱就能夠獲取圖片的類型、寬度和高度等。該函數的原型以下所示:數組

 

複製代碼代碼以下:

  array  getimagesize(string filename[,array &imageinfo])             //獲取圖片的大小和類型

 

  若是不能訪問filename指定的圖像或者其不是有效圖像,該函數將返回FALSE併產生一條E_WARNING級的錯誤。若是不出錯,getimagesize()返回一個具備四個單元的數組,索引0包含圖像寬度的像素值,索引1包含圖像高度的索引值,索引2是圖像類型的標記:1=GIF,2=JPG,3=PNG,4=SWF等,索引3是文本字符串,內容爲「height=」yyy」  width=」xxx」」,能夠直接用於<IMG>標記。以下所示:瀏覽器

 

複製代碼代碼以下:

<?php
list($width,$height,$type,$attr) = getimagesize("image/brophp.jpg");
echo "<img src='image/brophp.jpg'".$attr.">";
?>

 

  下面的例子聲明一個image()函數,能夠打開GIF、JPG和PNG中任意格式的圖片,並在圖片的中間加上一個字符串後,保存成原來的格式(文字水印)。在之後的開發中,若是須要一樣的操做(打開的是哪一種格式的圖片,也保存成對應格式的文件),能夠參與本例的模式,代碼以下所示:服務器

 

複製代碼代碼以下:
<?php     //向不一樣格式的圖片中間畫一個字符串(也是文字水印)     function image($filename,$string){         //獲取圖片的屬性,第一個寬度,第二個高度,類型1=>gif,2=>jpeg,3=>png         list($width,$height,$type) = getimagesize($filename);         //能夠處理的圖片類型         $types = array(1=>"gif",2=>"jpeg",3=>"png",);         //經過圖片類型去組合,能夠建立對應圖片格式的,建立圖片資源的GD庫函數         $createfrom = "imagecreatefrom".$types[$type];         //經過「變量函數」去打對應的函數去建立圖片的資源         $image = $createfrom($filename);         //設置居中字體的X軸座標位置         $x = ($width-imagefontwidth(5)*strlen($string))/2;         //設置居中字體的Y軸座標位置         $y = ($height-imagefontheight(5))/2;         //設置字體的顏色爲紅色         $textcolor = imagecolorallocate($image, 255, 0, 0);         //向圖片畫一個指定的字符串         imagestring($image, 5, $x, $y, $string, $textcolor);         //經過圖片類型去組合保存對應格式的圖片函數         $output = "image".$types[$type];         //經過變量函數去保存對應格式的圖片         $output($image,$filename);         imagedestroy($image);     }     image("brophp.gif","GIF");     image("brophp.jpg", "JPEG");     image("brophp.png", "PNG"); ?>
相關文章
相關標籤/搜索