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

发布时间 - 2026-01-11 01:13:52    点击率:

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

}

用到的第三方开源库:https://github.com/japgolly/svg-android

效果图:

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

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


# Android图片转为jpg保存到相册图库  # Android图片保存到相册图库  # Android  # svg图片转为jpg  # 基于Android实现保存图片到本地并可以在相册中显示出来  # android创建数据库(SQLite)保存图片示例  # Android实现保存图片到本地并在相册中显示  # Android画图并保存图片的具体实现代码  # Android实现点击WebView界面中图片滑动浏览与保存图片功能  # Android WebView实现长按保存图片及长按识别二维码功能  # Android编程实现保存图片到系统图库的方法示例  # Android实现长按图片保存至相册功能  # Android开发实现保存图片到手机相册功能  # 写了  # 加载  # 会有  # 有兴趣  # 欢迎大家  # 不支持  # 自带  # 我上  # 一篇文章  # 大家多多  # 进行交流  # 保存为  # 格式为  # 目录下  # 是一样的  # Override  # SimpleDateFormat  # mkdir  # yyyyMMddHHmmss  # df 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速生成ASP一键建站模板并优化安全性?  Python面向对象测试方法_mock解析【教程】  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Laravel怎么在Blade中安全地输出原始HTML内容  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  nginx修改上传文件大小限制的方法  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  如何在腾讯云免费申请建站?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何快速搭建高效简练网站?  高端网站建设与定制开发一站式解决方案 中企动力  如何在腾讯云服务器上快速搭建个人网站?  Laravel怎么清理缓存_Laravel optimize clear命令详解  java获取注册ip实例  如何实现javascript表单验证_正则表达式有哪些实用技巧  北京网站制作的公司有哪些,北京白云观官方网站?  浅谈Javascript中的Label语句  原生JS实现图片轮播切换效果  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Laravel如何使用Blade模板引擎?(完整语法和示例)  装修招标网站设计制作流程,装修招标流程?  Python图片处理进阶教程_Pillow滤镜与图像增强  历史网站制作软件,华为如何找回被删除的网站?  如何在IIS中新建站点并配置端口与IP地址?  如何用PHP工具快速搭建高效网站?  Laravel如何创建自定义中间件?(Middleware代码示例)  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  javascript如何操作浏览器历史记录_怎样实现无刷新导航  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Laravel如何使用.env文件管理环境变量?(最佳实践)  如何快速搭建高效香港服务器网站?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Python正则表达式进阶教程_复杂匹配与分组替换解析  使用spring连接及操作mongodb3.0实例  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Laravel如何为API生成Swagger或OpenAPI文档  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  微信小程序 配置文件详细介绍  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  iOS中将个别页面强制横屏其他页面竖屏  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Laravel如何配置任务调度?(Cron Job示例)  如何快速搭建安全的FTP站点?  PythonWeb开发入门教程_Flask快速构建Web应用