项目中用到别人封装好的相册浏览框架galleryfinal,并带有裁剪功能的,相机,多图选择功能。之前没留意感觉一直都正常。后来发现总有些图片在裁剪处有问题,一开始是以为图片大小的问题,测试后又不是。后来看log以及观察图片格式后是png图片格式都有问题。
先看下log:
上面bug百度过有一解决方法是:
在budle文件com.android.support:exifinterface:25.1.0升级裁剪功能依赖。
我发现在我项目行不通。如果你们可以的,就直接修改,就省事了。
解决方法2:
思路把png图片转为jpg图片再上传,上传完后再帮用户删除jpg图片。幸好裁剪的一张图片,中间操作时间几乎没什么影响,多了就不好说了。
转化过程png-->bitmap-->jpg
String ext = FilenameUtils.getExtension(photoPath);
//单独对png图片处理,转换为jpg格式
File pngToJpgFile = null;
String pngToJpgPath = null;
if(ext.equals("png")){
Bitmap bitmap = BitmapFactory.decodeFile(photoPath);
if(bitmap != null){
Log.d("fileBitmap",bitmap+"");
}
String[] strings = photoPath.split("\\.");
if(strings.length>0 && bitmap != null){
//存放在本地jpg图片
pngToJpgPath = strings[0] +"_png"+".jpg";
pngToJpgFile = new File(pngToJpgPath);
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(pngToJpgFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
try {
fOut.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
fOut.close();
} catch (IOException e) {
e.printStackTrace();
}
if(pngToJpgFile.exists()){
photoPath = pngToJpgPath;
MyApplication.setPngToJpgPath(photoPath);
}
}
}
以上是png生成jpg图片路径的代码,至于怎么删除图片,就不说了,不懂自行百度。
这种方法有点投机取巧,有必须解决这个bug,也是没办法。如果你们发现有更好的方法记得评论。