android - 如何将android Canvas 保存为svg?

标签 android canvas svg

是否有任何可能的方法将 android Canvas 保存为 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();
            }

我想将 Canvas 保存为 svg 格式?

最佳答案

不清楚你的意思是要将 Bitmap 保存为 SVG,还是要将 Canvas 保存为 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

您可能指的另一件事是记录 Canvas 2D 绘图命令(例如 Canvas.drawRect())并从中生成 SVG 文件。这在技术上是可行的,但我不知道有任何工具或库可以做到这一点。

关于android - 如何将android Canvas 保存为svg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31808832/

相关文章:

javascript - 如何检索渲染的 Canvas 元素的坐标 (x,y,w,h)?

android - Telegram 在 VOIP 通话中强制关闭?

textview - Android 自动调整大小的 TextView 的自动换行

android - 重新创建 Activity 时,底部工作表保留在屏幕上

android - 让 Glide 作为所有类的单例工作

css - SVG 堆叠元素颜色重叠

Android - 具有硬件加速和抗锯齿的画线会导致伪影

html - 如何最好地将 Canvas 叠加在图像上?

javascript - 没有像 d3 这样的库的单调三次插值的 SVG 实现

javascript - 如何从 svg 内部获取嵌入元素