PHP學習筆記6 – 映像

來源:互聯網
上載者:User
相關中文參考手冊:http://w.yi.org/ftp/FAPM/PHP/zh/ref.image.html

 

向來跟映像沾邊的東西比較容易提起我興趣。這個要好好學習一下了。

 

映像格式

 

JPEG

 

音“jay-peg”。有損壓縮,人眼可忍受。不適合繪製線條、文本或顏色塊

 

PNG

 

音“ping”。無損壓縮,適合包含文本、直線或簡單顏色塊。提供可變透明度、微細修正和二維空間交錯。不支援動畫。動畫支援在其擴充格式MNG中,不知道開發完成了沒。目前的瀏覽器應該還不支援。

 

GIF

 

無損壓縮,適合包含文本、直線或簡單顏色塊。支援動畫。

 

建立映像的步驟

1.建立一個背景映像,以後的操作都將基於此背景映像。

 

2.在背景映像上繪製圖形輪廓或輸入文本。

 

3.輸出最終圖形。

 

4.清除所有資源。

 

例:

 

Code
<?php
    $height = 200;
    $width = 200;
    //建立一個真彩色映像
    $im = imagecreatetruecolor($width, $height);
    //構造顏色,返回可供使用的顏色標識符
    $white = imagecolorallocate($im, 255, 255, 255);
    $blue = imagecolorallocate($im, 0, 0, 150);
    
    //在(0, 0)處用藍色進列區域填充
    imagefill($im, 0, 0, $blue);
    //繪製直線
    imageline($im, 0, 0, $width, $height, $white);
    //繪製文本
    imagestring($im, 4, 50, 150, 'Sales', $white);
    
    //告訴瀏覽器我們要輸出的是映像而不是文本,並且制定MIME類型
    header('Content-type:image/png');
    
    //輸出映像資料
    imagepng($im);
    
    //銷毀映像標識符所佔用的資源
    imagedestroy($im);
?>

 

這個是最簡單的流程。

 

ImageFill()函數的疑問

 

查手冊說是對該點以及連通地區進行填充,但是不清楚是四連通還是八連通。

 

關於header()函數

 

header()函數和繪圖沒有直接關係。該函數發送一個HTML標題字串。通常,瀏覽器中接收一個檔案時,Web伺服器首先發送的內容是MIME類型,以告訴瀏覽去應該怎樣解析接下來的資料。

 

對於一個HTML或者PHP頁面,最先發送的是:Content-type: text/html

 

我們的這個例子中則是通過 Content-type: image/png 告訴瀏覽器將發生的是一個png映像而不是常規的HTML輸出。比較奇怪的是實際進行測試的時候,發送其他類型或者不發送這個標題,IE7瀏覽器一樣可以顯示映像。但這在FF和Opera中行不通。

 

header()的一個典型應用是http重新導向:header('Location: http://www.cnblogs.com/zhengchuyu/');

 

header()只發送一次,也就是說如果同一頁面中已經發送一次了,接下來出現的header()函數將不會被執行。

 

關於imagepng()函數

 

實際上這個函數具有兩個參數。第二個如果不設定的話預設發送到瀏覽器顯示。也可以對其進行設定一個檔案名稱,將發送的檔案寫到某處。

 

使用戶端顯示映像的三種方式

1.如上述方式,一個由映像組成的頁面;

 

2.將映像寫到檔案中,用img標籤指向它;

 

3.將映像建立指令碼置於img標籤中,實際上是一種內嵌映像的方式。

 

如:<img src="simplegraph.php" height="200" width="200" alt="test" />

 

一些細節中文編碼

 

在PHP映像中輸出中文,需要使用utf-8編碼,有現成的轉換函式可用:

 

$utf8_img_text = iconv("gb2312", "utf-8", $text);

 

保留映像透明

 

我們可以通過讀入現有映像進行圖象建立,如通過ImageCreateFromPng(),ImageCreateFromJpeg(),ImageCreateFromGif()。當讀入一個具有透明背景的映像時,我們需要保留其透明通道,才可以讓映像保持透明。

 

imagesavealpha($im, true);

 

讀入字型檔 

 

需要讀入字型檔的時候,可能會遇到檔案存取權限的問題(無法訪問硬碟上其他目錄)提示Invalid font filename。目前的解決辦法是將字型檔拷貝到指令碼所在目錄,指定檔案目錄

 

putenv('GDFONTPATH='.realpath('.'));

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.