2015-09-08 72 views
1

我有一個PHP函數,它接受任意字符串和從它創建圖像資源,自動探測圖像格式,如下時:PHP出口圖像作爲相同類型(PNG,JPG等)使用imagecreatefromstring()

$im = imagecreatefromstring($image_data_string); 

您肯定知道,這將創建$ IM圖像資源時$image_data_string包含任何支持的圖像類型,如JPG,PNG等

一些操作到$ IM資源後(修改一些像素等),我想要以相同的格式再次返回圖像字符串。也就是說,如果數據字符串包含PNG圖像,我想返回生成的PNG圖像的字符串。如果是JPG,那麼我想以字符串形式將它作爲JPG返回。

PHP支持imagejpeg()imagepng()等功能,所以如果我知道如何檢測$ im資源的圖像類型,那麼我將全部設置。有像imagesx()imagesy()這樣的函數返回$im資源的寬度和高度,但是我找不到適當的函數,它會返回$im資源的圖像類型。

我想到的唯一方法是分析原始$image_data_string的第一個字節,以便找出圖像類型。但我寧願爲此目的使用本地PHP函數,這可以在$ im資源參數上工作。有沒有這樣的事情?

感謝

+0

你爲什麼不使用額外的變量來保存圖像擴展? –

+0

你是如何得到$ image_data_string變量的?有可能你也可以在這個階段存儲文件類型? –

回答

0

使用此代碼,而不是

$imgdata = base64_decode($image_data_string); 

$f = finfo_open(); 

$mime_type = finfo_buffer($f, $imgdata, FILEINFO_MIME_TYPE); 

$im = imagecreatefromstring($image_data_string); 

$filename = 'somerandomname'; 

switch($mime_type){ 
    case 'image/png': 

     imagepng($image, $filename.'.png'); 

    break; 
    default: 

    break; 
} 
imagedestroy($im); 
+2

'$ image_data_string'不是base64編碼的,所以我沒有理由對它進行解碼。除此之外,感謝指向finfo_open(),這回答了這個問題。 –

相關問題