2013-01-25 136 views
4

我有這個Base64 PNG,我想解碼爲JPG。如果我轉換成PNG它工作正常,使用:如何將Base64 PNG轉換爲JPG圖像?

list($type, $data) = explode(';', $data); 
list(, $data)  = explode(',', $data); 
$data = base64_decode($data); 
file_put_contents('myDirectory/filename.png', $data); 

但如果我嘗試將其保存爲JPG,它在黑色和白色使用(MyDirectory/filename.jpg)出來。

如何將其轉換爲JPG?這裏是我的Base64 PNG的例子:

data:image/png;base64,iVBORw0KGgoAAAANSUhE... 
+0

JPEG和PNG之間的差別不只是擴展,它是一個完全不同的編碼 –

+0

我知道,任何知道該怎麼做,不同的編碼? –

+0

http://stackoverflow.com/questions/1201798/use-php-to-convert-png-to-jpg-with-compression或http://stackoverflow.com/questions/8550015/convert-jpg-gif-to -png功能於PHP? –

回答

8

Base64編碼是嚴格用於將數據轉換爲文本格式運輸的編碼格式。無論編碼格式如何,如果您需要其他格式,都需要進一步轉換。所以如果你想PNG是一個JPEG,在Base64解碼之後它需要被另一個工具轉換成JPEG。 This thread有一些很好的建議。回答線程的@Andrew Moore建議使用這樣的函數。一定要有GD庫安裝了您的PHP設置的一部分:

// Quality is a number between 0 (best compression) and 100 (best quality) 
function png2jpg($originalFile, $outputFile, $quality) { 
    $image = imagecreatefrompng($originalFile); 
    imagejpeg($image, $outputFile, $quality); 
    imagedestroy($image); 
} 

因此,使用你的代碼作爲一個例子,那麼您需要使用此功能來做到以下幾點:

png2jpg('myDirectory/filename.png','myDirectory/filename.jpg', 100); 

或者你可以解構是png2jpg函數的功能,在你的代碼中使用它們像這樣:

list($type, $data) = explode(';', $data); 
list(, $data)  = explode(',', $data); 
$data = base64_decode($data); 
file_put_contents('myDirectory/filename.png', $data); 
$image = imagecreatefrompng('myDirectory/filename.png'); 
imagejpeg($image, 'myDirectory/filename.jpg', 100); 
imagedestroy($image); 
5

因爲PHP 5.2.0對最簡單的方法,是使用data://包裝,您可以在許多功能中像使用文件一樣使用它。

$image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhE...'; 
$image = imagecreatefrompng($image); 
imagejpeg($image, 'myDirectory/filename.jpg', 100); 
imagedestroy($image); 
相關問題