2014-07-03 54 views
2

這有點奇怪。用戶可以將圖像上傳到服務器,插入一些文本,然後從服務器端創建一個包含用戶文本和上傳圖像的新圖像。imagecreatefrompng並不總是在同一圖像上工作

要創建新圖像,我使用的是imagecreatefrompngjpg,具體取決於上傳文件的文件類型。

如果用戶不喜歡創建的圖像,用戶可以編輯文本或上傳另一圖像並再次點擊提交。

Create image from user's uploaded image and test

,因爲它應該只是一個發生這一切工作。當用戶上傳一個png文件中的新映像創建但是,如果用戶決定改變一些文字,並具有相同的png文件,我得到這樣的警告

Warning: imagecreatefrompng(): '..path.../temp/1404381132_my_png.png' is not a valid PNG file in ...path\save_image.php 

這是一個有點怪異真的,如果第一次使用同樣的圖像爲什麼第二次不能使用?

我在jpgs上測試過同樣的東西,沒有問題。

只給你一些測試用例的想法:

測試案例1

用戶文本1:abc 用戶文本2:abc 圖片:img.jpg

圖片沒有錯誤發生

用戶決定改變一些文本,但具有相同的圖像:

用戶文本1:abcdef 用戶文本2:創建abcdef

圖像,也不會出現錯誤

用戶決定改變圖像

圖片:img_2.jpgimg_2.png

圖像被創建,無錯誤發生

測試案例2

用戶文本1:abc 用戶文本2:abc 圖片:創建img.png

圖片,無錯誤發生

用戶決定改變一些文字,但有相同的圖像:

用戶文本1:abcdef 用戶文本2:abcdef

Warning image is not a valid PNG錯誤

測試案例3

用戶文本1:abc 用戶文本2:abc 圖片:img.png

圖像被創建,沒有錯誤發生

用戶決定改變圖像:

圖片:創建img_2.jpgimg_2.png

圖像,也不會出現錯誤

我想這一個有點太具體,不確定是否有人能解決這個問題。

回答

0

這可能是因爲透明度以及您使用PNG的方式。我曾多次與PNG的原因問題合作過。我一直解決它的方法是通過上傳創建另一個PNG和該文件,而不是上傳一個工作:

$uploaded = imagecreatefrompng('uploaded.png'); 

// Create a template canvas 
$template = imagecreatetruecolor(imagesx($uploaded), imagesy($uploaded)); 

// Copy the uploaded image onto the canvas, keeping same height and width 
imagecopyresampled($template, $uploaded, 0, 0, 0, 0, imagesx($uploaded), imagesy($uploaded), imagesx($uploaded), imagesy($uploaded)); 

// Save it and work on this one 
imagepng($template, 'workingfile.png'); 

imagedestroy($template); 
+0

所以我創建上傳圖像的圖像,保存一個並與工作。 ..我會嘗試一下。 –

+0

這是正確的。無論如何請試一試,並檢查是否啓用了GD PNG支持。 – beingalex

+0

不幸的是仍然有同樣的問題 –