如何将android canvas保存为svg?

时间:2015-08-04 12:02:44

标签: android canvas svg

有没有办法将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 个答案:

答案 0 :(得分:1)

目前尚不清楚您是想将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 2D绘图命令(例如Canvas.drawRect())并从中生成SVG文件。这在技术上是可行的,但我不知道存在任何存在的工具或库。