2013-04-10 106 views
4

是否可以在不將圖像保存到計算機中的情況下將.jpg,.jpeg或.gif圖像轉換爲.png。 喜歡的東西:將.jpg,.jpeg或.gif轉換爲.png而不將它們保存在機器上

function read_image($filename, $extension) { 
    switch($extension) { 
     case '.png': 
      $image = imagecreatefrompng($filename); 
      break; 
     case '.jpg': case '.jpeg': 
      $unTransformed = imagecreatefromjpeg($filename); 
      $image = transform($unTransformed); 
      break; 
     case '.gif': 
      $unTransformed = imagecreatefromgif($filename); 
      $image = transform($unTransformed); 
      break; 
     return $image; 
    } 
} 
function transform($unTransformed) { 

    // Some magic here without actually saving the image to your machine when transforming 

    return $transformed; 
} 

老實說,我無法找到這個答案。另請注意,GD是強制性的。

+0

你見過這個... http://stackoverflow.com/questions/14431363/converting-during-upload-before-saving-on-server-png-gif-to-jpg – 2013-04-10 12:25:46

+0

以防萬一..不要存儲它,只是像你在你的程序中那樣返回它。 – 2013-04-10 12:26:10

回答

4

使用輸出緩衝和捕捉imagepng的輸出應該工作,像這樣:

function transform($unTransformed) { 
    ob_start(); 
    imagepng($unTransformed); 
    $transformed = ob_get_clean(); 
    return $transformed; 
} 

當然,這是假設你真的想包含您的圖像文件的字節流PNG的變量。如果唯一的目的是反過來輸出它,請不要打擾並按Marty McVry的建議去做。

+0

這似乎是bug:S無論如何,我需要對它進行一些着色。 – 2013-04-10 13:12:42

2
從PHP手冊

直接:(imagepng()功能全,其中一個PNG圖像輸出到瀏覽器或文件)

header('Content-Type: image/png'); 
$transformed = imagepng($untransformed); 

您可能會遇到一起發送的頭一個問題,所以它可能是必要的在其他地方輸出標題或將由imagepng創建的流轉換爲base64字符串,並根據代碼的其餘部分顯示圖像。