galleryfinal裁剪png图片问题##
galleryfinal是第三方开源框架,相册浏览,裁剪,相机,多图选择功能,很好用的一个框架。
之前没留意感觉一直都正常。后来发现总有些图片在裁剪处有问题,一开始是以为图片大小的问题,测试后又不是。后来看log以及观察图片格式后是png图片格式都有问题。
错误log:
解决方法有三个,依次以成功率高到低
1.cropImageActivity修改###
在cn.finalteam.galleryfinal.widget.crop.cropImageActivity类中的saveOutput方法有这样的一段代码,会判断图片后缀是png还是jpg,如果是png,format就会是Bitmap.CompressFormat.PNG,然后就无法把数据写进去那个crop文件,导致文件大小为0,具体原因要看源代码.我把if判断去掉,无论png还是jpg,format都是JPG,然后就没问题了。
2.png图片转jpg图片###
思路把png图片转为jpg图片再上传,上传完后再帮用户删除jpg图片。幸好裁剪的一张图片,中间操作时间几乎没什么影响,多了就不好说了。
转化过程png–>bitmap–>jpg
String ext = FilenameUtils.getExtension(photoPath);
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);
}
}
}
上面有可能有些值为空,最好加多点判空处理,免得引起其他问题,setPngToJpgPath()方法是存储多生成的jpg图片路径。记得还需要在编辑完去删除喔,这里没给出代码
3.升级裁剪功能依赖
在budle文件中添加com.android.support:exifinterface:25.1.0
注:这我没尝试成功,但有人成功过,可能galleryfinal框架不一样,但都可以试,万一成功了呢