如何将Android画布保存为SVG?

3

有没有可能将Android画布保存为SVG格式的文件?我知道如何将其保存为PNG/JPEG格式,目前我正在使用JPEG格式进行保存。以下是我目前用于保存的代码:

            canvas.setDrawingCacheEnabled(true);
            canvas.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
            Bitmap bitmap = canvas.getDrawingCache();
            String path = Environment.getExternalStorageDirectory().getAbsolutePath();
            File file = new File(path+"/image.jpg");
            FileOutputStream ostream;
            try {
                file.createNewFile();
                ostream = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream);
                ostream.flush();
                ostream.close();
                Toast.makeText(getApplicationContext(), "image saved", Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_SHORT).show();
            }

我希望将画布保存为svg格式?


1
你知道SVG是什么吗?它是一种矢量文件。这意味着每条线、曲线、路径都是用坐标表示的(在x,y处的位置,移动到x1,y1,创建一个以x3,y3为中心,半径为n像素的圆形等)。Android不支持原生的SVG文件,尽管它们是基于XML的。你需要一个第三方库来读取SVG。但据我所知,还没有从位图到矢量的转换工具。 - Phantômaxx
1个回答

1
不清楚您是想将位图保存为SVG,还是想将画布保存为SVG。它们并不一定相同。从您的示例代码中可以看出,您似乎是要保存位图。 保存位图 正如Der Gollum所说,将位图保存为SVG没有任何意义。SVG是一种矢量格式。您可以将位图图像放入SVG中,例如以下示例(假设为640x480图像)。SVG文件只是XML,因此您可以生成类似于以下内容的东西:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     width="640px" height="480px">
  <image width="640" height="480"
         xlink:href="data:image/jpeg;base64,...base64 encoded image data here..."/>
</svg>

你有一个SVG文件,但它仍然只是一个位图。这就像在PDF文件中有一个JPEG图像一样。
使用工具跟踪位图并生成矢量图是可能的。但这是一个困难的问题,而且做这件事的工具(如“potrace”)通常不能产生可以在没有手动调整的情况下使用的结果。
保存画布
你可能指的另一件事是记录Canvas 2D绘图命令(例如Canvas.drawRect()),并从中生成一个SVG文件。技术上讲是可能的,但我不知道是否存在任何现成的工具或库来实现这一点。

谢谢@paul。我基本上想要将画布保存为SVG!我添加了示例代码,只是为了展示我现在的做法。我知道将画布保存为位图和将画布保存为SVG是完全不同的。对于任何误解造成的不便,我感到抱歉。 - Jayadev
@Jayadev 你好,你能将画布保存为SVG格式吗?如果可以的话,你能提供一下你是如何实现的示例代码吗? - Amalan Dhananjayan
@Jayadev 我找到了一种方法,我会写一篇博客并很快与你分享链接 :) - Amalan Dhananjayan
@AmalanDhananjayan 那真的太好了 :) 谢谢! - Jayadev
@Jayadev 先生,您好,您能将画布保存为SVG格式吗?您写过任何博客吗? - Ram
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接