当前位置: 移动技术网 > 移动技术>移动开发>Android > Android把svg图片转为jpg保存到相册图库

Android把svg图片转为jpg保存到相册图库

2019年07月24日  | 移动技术网移动技术  | 我要评论

我上一篇文章写了《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();
 }

}

用到的第三方开源库:

效果图:

欢迎大家进行交流,指正!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网