Android把svg图片转为jpg保存到相册图库
程序员文章站
2023-12-01 10:54:10
我上一篇文章写了《android加载html中的svg格式图片进行显示〉,有兴趣的同学可以去看看地址:android加载html中svg格式图片进行显示
但是我们一般在浏...
我上一篇文章写了《android加载html中的svg格式图片进行显示〉,有兴趣的同学可以去看看地址:android加载html中svg格式图片进行显示
但是我们一般在浏览图片时,还会有保存图片到相册或图库的操作,而android手机自带的相册或图库是不支持查看svg格式的图片的,所以我们需要把svg格式的图片转为jpg或png格式再进行保存,我的例子是保存为jpg格式,png也是一样的,我这里写了个工具类,可以保存jpg,png格式的图片,也可以把svg图片转为jpg进行保存.接下来我贴下我的代码:
public class fileutils { public static void savephoto(final context context, final string url , final saveresultcallback saveresultcallback) { new thread(new runnable() { @override public void run() { file appdir = new file(environment.getexternalstoragedirectory(), "out_photo"); if (!appdir.exists()) { appdir.mkdir(); } simpledateformat df = new simpledateformat("yyyymmddhhmmss");//设置以当前时间格式为图片名称 string filename = df.format(new date()) + ".jpg"; file file = new file(appdir, filename); if (url.endswith(".svg")){ //拿到图片在assets目录下的相对路径 string replaceurl = url.replace("file:///android_asset/", ""); try { svg svg = new svgbuilder().readfromasset(context.getassets(), replaceurl).build(); //拿到svg图片的drawable picturedrawable drawable = svg.getdrawable(); //图片背景的画笔 paint paint = new paint(); paint.setcolor(color.white); //图片线条的画笔 paint paint1 = new paint(); paint1.setcolor(color.black); //创建bitmap对象 bitmap bitmap = bitmap.createbitmap(drawable.getintrinsicwidth(), drawable.getintrinsicheight(), bitmap.config.argb_8888); canvas canvas = new canvas(bitmap); canvas.drawrect(0,0,bitmap.getwidth()+50,bitmap.getheight()+50,paint); drawable.setbounds(0,0,canvas.getwidth(),canvas.getheight()); drawable.draw(canvas); fileoutputstream fos = new fileoutputstream(file); //转为jpg格式并写入到sd卡 bitmap.compress(bitmap.compressformat.jpeg, 100, fos); fos.flush(); fos.close(); saveresultcallback.onsavedsuccess(); } catch (ioexception e) { e.printstacktrace(); saveresultcallback.onsavedfailed(); } }else { try { //保存jpg格式的图片到相册中 fileoutputstream fos = new fileoutputstream(file); inputstream fis = context.getassets().open(url.replace("file:///android_asset/","")); int len = 0; byte[] bytes = new byte[1024]; while ((len = fis.read(bytes)) != -1){ fos.write(bytes,0,len); } fos.flush(); fis.close(); fos.close(); saveresultcallback.onsavedsuccess(); } catch (filenotfoundexception e) { saveresultcallback.onsavedfailed(); e.printstacktrace(); } catch (ioexception e) { saveresultcallback.onsavedfailed(); e.printstacktrace(); } } //保存图片后发送广播通知更新数据库 uri uri = uri.fromfile(file); context.sendbroadcast(new intent(intent.action_media_scanner_scan_file, uri)); } }).start(); } public interface saveresultcallback{ void onsavedsuccess(); void onsavedfailed(); } }
用到的第三方开源库:
效果图:
欢迎大家进行交流,指正!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 郑多彬为什么自杀(真相是什么)