Reputation: 5716
How can I detect if an image has been uploaded completely or partially? I encountered a strange situation where only half an image has been uploaded. The following image was uploaded by a user through an Android application via a Web service:
The admin portal and Web service is written using the Yii framework. What might have caused an image to be created like this? Android Developer sends the base-64 encoded string and I decode it the following way:
$profilePicture = $data['profilePicture'];
header('Content-Type: image/png');
$rnd = sprintf('%04d', rand(0, 9999));
$fileName = $rnd . '_' . time() . '.png'; // random number + timestamp
$uploadPath = User::getProfilePicturePath() . $id;
if (!file_exists($uploadPath) and ! is_dir($uploadPath)) //create a directory only if it does not exist.
mkdir($uploadPath);
if (!file_put_contents($uploadPath . DIRECTORY_SEPARATOR . $fileName, base64_decode($profilePicture)))
I doubt this is the cause, because Android Developer is sending the base-64 encode before file is completely uploaded. Or is it something else?
$profilePicture is equal to 64 base string like this,
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
Android side code is as below,
String imageString = Base64.encodeBytes(byteImage);
This is the class file used.
http://www.mirthcorp.com/community/issues/secure/attachment/10313/Base64.java
Upvotes: 1
Views: 695
Reputation: 5716
Can use imagecreatefrompng
function to check if provided image is broken or not.
$src1 = 'F:\Test\0374_1423730003.png';
$src2 = 'F:\Test\5030_1423722865.png'; // broken
$im = @imagecreatefrompng($src1);
if ($im)
echo 'created img';
else
echo 'not created, broken image';
Upvotes: 2
Reputation: 1372
public String BitMapToString(Bitmap bitmap){
ByteArrayOutputStream baos=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,100, baos);
byte [] b=baos.toByteArray();
String temp=null;
try{
System.gc();
temp= Base64.encodeToString(b, Base64.DEFAULT);
}catch(Exception e){
e.printStackTrace();
}catch(OutOfMemoryError e){
baos=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,50, baos);
b=baos.toByteArray();
temp=Base64.encodeToString(b, Base64.DEFAULT);
Log.e("EWN", "Out of memory error catched");
}
return temp;
}
This method helps you to convert Bitmap image to Base64 encode string.
Upvotes: 1