關於 PHP 的圖形函式

edited 十月 2013 in PHP新手區
:roll: 不好意思,其實這是書中範例遇到的問題. 其中涉及到函式-ImageCreateFromJPEG() ,且 My GD Version is 2.0.28 and support JPEG! 但卻無法正確在 Browser 中呈現出圖片,我 Post 如下,還請各位高手們指點一下迷津:

[Book] --The PHP Anthology: Object Oriented PHP Solutions
[My problem] --
在 AccessControl 章節中的 "7.php"(擷取部分):
<img src="8.php" />
以及 "8.php"(擷取部分):
<?php 
// Include RandomImageText class
require_once ('Images/RandomImageText.php');

// Instantiate RandomImageText giving the background image
$imageText=new RandomImageText ('reg_image/reg_image.jpg');

// Send the right mime type
header ( 'Content-type: image/jpeg' );

// Display the image
ImageJpeg($imageText->getImage());
?>

Value of "$imageText->getImage()" is returned by class- RandomImageText .
如下所列,僅擷取其部分內容:
class RandomImageText {

    // RandomImageText constructor
    function RandomImageText ($jpeg,$fHeight=10,$fWidth=10) {
        ............
        $this->image = ImageCreateFromJPEG($jpeg);  
        ......... 
    }

    function getImage () { 
            return $this->image; 
    }
}

But when i use browser to request 7.php, "reg_image.jpg" is not displayed. 如我開版所提就只看到一個叉叉.
.....Why?? :cry:

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=1291

評論

  • edited 二月 2006
    reg_image/reg_image.jpg <== 相對路徑中有這個檔案嗎?
  • edited 二月 2006
    有的,我還試過將 7.php 中的 <img src="8.php" /> 改成 <img src="reg_image/reg_image.jpg" /> 結果可正常顯示的...

    [補充]:
    我還試過直接瀏覽 8.php ,一開始是說呼叫未定義的函式: ImageCreateFromJPEG() !

    但,此狀況在我於 php.ini 中 enable "extension=php_gd2.dll" 後就沒有任何錯誤訊息再出現了...
  • edited 二月 2006
    那也許要進入程式流程去偵錯了,另外,你的測試環境與書籍作者的環境一致嗎?

    有時候可能是版本的問題造成。
  • edited 二月 2006
    雖然我目前的 GD Version is 2.0.28 and support JPEG
    若我想變更,可以指引一下要到那兒去找其他的 gd 來裝嗎?
    原來的 ext/php_gd2.dll 是否直接覆蓋或刪除即可?
  • edited 二月 2006
    查函數手冊,該函數是全小寫:
    imagecreatefromjpeg
  • edited 二月 2006
    但 php 不是無分大小寫嗎?

    我想我可能找到原因了
    由於我的資料庫預設是 utf-8 ,而在 windows 下不論用 Emeditor/記事本 寫程式預設都是 big5 的.所以我一直都有用 ConvertZ (version 7.40 ~ 8.02 都試過)來轉換編碼(big5->utf-的習慣,也一值都沒出過問題.

    剛才我將原始的 files (沒轉換過編碼的)拿來用竟發現圖片可正常顯示了....

    既然這樣,不知還有哪一套轉碼程式可用的呢?
  • edited 二月 2006
    咦,玩了這麼多年,我竟然沒發現php是不分大小寫的:-D:-D

    經過測試,不是你的檔案轉的正不正確的問題,而是應該根本不能轉!
    所以,即使你的資料庫是utf-8,也不代表你的圖檔處理程式也該轉換成utf-8 編碼!
    如果你是要加字進來,譬如呼叫了ImageTTFText 這個函數,那也只需要適時搭配 iconv 這個函數即可!

    如:
    http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&p=4587403
  • edited 二月 2006
    Thanks.

    " 經過測試,不是你的檔案轉的正不正確的問題,而是應該根本不能轉! "
    請問一下此句是何合意??
    如果不是用 converz 轉碼造成的問題,那麼為什麼我將原始的 files (沒轉換過編碼的)拿來用圖片就可正常顯示了....


    另外 iconv() 不是只針對文字符號嗎?
    而我的
    <img src="8.php" />

    其中 "8.php" 如下是用來 -- Output image to browser or file
    <?php
    .
    .
    // Display the image
    ImageJpeg($imageText->getImage());
    ?>
  • edited 二月 2006
    檢查一下 ConvertZ 的設定,在檔案轉換中有個選項是 "加BOM到UTF8檔案",這個項目取消後比較不會發生問題。

    程式碼轉換成 UTF-8 與否應該不會影響顯示圖片的問題,只是有些情況下轉換工具會加入 PHP 無法辨識的判斷字元。

    ConvertZ 應該是目前已知軟體中最好用的吧,我使用的版本是 8.02 。
  • edited 二月 2006
    我的意思是說,ImageJpeg 的輸出顯然受到utf-8 的影響(官網也有人指出), 不管它算不算一個bug,但我們既然知道會有此影響就要去迴避它!

    至於iconv,是預防你要秀文字在圖上時,萬一編碼不對才用它!
    你不是為了要輸出文字的圖形才研究這支程式的嗎? 如果只是單獨要用php 當圖檔網址,不必繞這麼大一圈不是嗎?
  • edited 三月 2006
    沒錯,就是以下這一段!! (...沒想到還沒切入正軌已經好累好累啊.)
    那請問何處可關注此函式的 bug 與改良進度呢?

    Source: http://hk.php.net/manual/hk/function.imagejpeg.php
    ==========================================
    If you are looking through all your files for any white space before '<?php' or after '?>' (because your darn images are just not displaying in the browser!) you should also consider your file encoding. I was saving all my .php files as UTF-8 because I thought it was the fashionable thing to do, but only after I re-saved the pages pertinent to image generation as Western ISO-1 did the image display correctly. I think perhaps my php cgi executable is not Unicode source file friendly, and therefore it was outputting Unicode's Byte-Order Mark. I think this BOM wouldn't interfere with text since a browser would ignore it, but as the first couple of bytes of a jpeg, it caused Firefox, IE, and Safari to fail.
    ==========================================
Sign In or Register to comment.