欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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();
 }

}

用到的第三方开源库:

效果图:

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

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

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

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