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


相关推荐: 如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  JavaScript如何操作视频_媒体API怎么控制播放  网站制作企业,网站的banner和导航栏是指什么?  如何确认建站备案号应放置的具体位置?  Python函数文档自动校验_规范解析【教程】  微信小程序制作网站有哪些,微信小程序需要做网站吗?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  iOS正则表达式验证手机号、邮箱、身份证号等  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  南京网站制作费用,南京远驱官方网站?  制作公司内部网站有哪些,内网如何建网站?  如何在云主机快速搭建网站站点?  如何用PHP工具快速搭建高效网站?  香港服务器选型指南:免备案配置与高效建站方案解析  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  WEB开发之注册页面验证码倒计时代码的实现  javascript中的try catch异常捕获机制用法分析  EditPlus中的正则表达式 实战(4)  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  浅述节点的创建及常见功能的实现  如何在IIS服务器上快速部署高效网站?  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  百度浏览器如何管理插件 百度浏览器插件管理方法  Python正则表达式进阶教程_复杂匹配与分组替换解析  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  深入理解Android中的xmlns:tools属性  音响网站制作视频教程,隆霸音响官方网站?  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  用yum安装MySQLdb模块的步骤方法  如何确保FTP站点访问权限与数据传输安全?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Swift中循环语句中的转移语句 break 和 continue  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Linux系统命令中tree命令详解  Laravel怎么在Controller之外的地方验证数据  EditPlus 正则表达式 实战(3)  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  Android滚轮选择时间控件使用详解  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何用狗爹虚拟主机快速搭建网站?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  微信小程序 五星评分(包括半颗星评分)实例代码  linux写shell需要注意的问题(必看)  linux top下的 minerd 木马清除方法  如何在宝塔面板中修改默认建站目录?