【问题标题】:How to save android canvas as svg?如何将android画布保存为svg?
【发布时间】:2015-10-26 19:57:31
【问题描述】:

是否有任何可能的方法将 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?

【问题讨论】:

  • 你知道什么是 SVG 吗?这是一个矢量文件。这意味着每条线、曲线、路径都用坐标表示(在 x,y 处的位置,移动到 x1,y1,做一个以 x3,y3 为中心且半径为 n 个像素的圆,...)。 Android 本身不支持 SVG 文件。即使它们是基于 xml 的。您将需要一个第三方库来读取 SVG。但是还没有任何东西可以从 bitmap 转换为 vectorial,AFAIK。

标签: android canvas svg


【解决方案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 嗨,你能把画布保存到 svg 吗?如果是这样,我可以在任何地方看到有关您如何做到这一点的示例代码?
  • @AmalanDhananjayan 嗨,我想不出办法。
  • @Jayadev 我找到了一个方法,我会在上面写一篇博客,并尽快分享链接:)
  • @AmalanDhananjayan 那真的很棒 :) 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 2012-03-27
  • 2018-11-13
相关资源
最近更新 更多