画布上的图像到 JPEG 文件

Posted

技术标签:

【中文标题】画布上的图像到 JPEG 文件【英文标题】:Image on canvas to JPEG file 【发布时间】:2011-01-11 14:31:10 【问题描述】:

我正在画布上绘制 2D 图像。

我想将画布上显示的图像保存为 JPEG 文件,我该怎么做?

【问题讨论】:

由于您提到的链接早已失效,您能否在问题本身中添加更多上下文? 【参考方案1】:
    创建一个空位图 创建一个新的 Canvas 对象并将此位图传递给它 调用 view.draw(Canvas) 将您刚刚创建的画布对象传递给它。 Refer Documentation of method for details. 使用 Bitmap.compress() 将位图的内容写入 OutputStream,可能是文件。

伪代码:

Bitmap  bitmap = Bitmap.createBitmap( view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 

【讨论】:

您好 Samuh,我尝试了代码,它生成了一个 jpeg 文件,但没有画布绘制的形状或我在画布上写的任何内容。任何意见。谢谢,科坦【参考方案2】:
    启用绘图缓存 想画什么就画什么 从视图中获取位图对象 压缩并保存图像文件

import java.io.File;
import java.io.FileOutputStream;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class CanvasTest extends Activity 

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);

        Draw2d d = new Draw2d(this);
        setContentView(d);
    

    public class Draw2d extends View 

        public Draw2d(Context context) 
            super(context);
            setDrawingCacheEnabled(true);
        

        @Override
        protected void onDraw(Canvas c) 
            Paint paint = new Paint();
            paint.setColor(Color.RED);          
            c.drawCircle(50, 50, 30, paint);

            try 
                getDrawingCache().compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File("/mnt/sdcard/arun.jpg")));
             catch (Exception e) 
                Log.e("Error--------->", e.toString());
            
            super.onDraw(c);
        

    

【讨论】:

不知何故,在 onDraw 方法中压缩和保存是个坏主意。 它给了我一个黑色的图像【参考方案3】:

画布转 JPG:

Canvas canvas = null;
FileOutputStream fos = null;
Bitmap bmpBase = null;

bmpBase = Bitmap.createBitmap(image_width, image_height, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bmpBase);
// draw what ever you want canvas.draw...

// Save Bitmap to File
try

    fos = new FileOutputStream(your_path);
    bmpBase.compress(Bitmap.CompressFormat.PNG, 100, fos);

    fos.flush();
    fos.close();
    fos = null;

catch (IOException e)

    e.printStackTrace();

finally

    if (fos != null)
    
        try
        
            fos.close();
            fos = null;
        
        catch (IOException e)
        
            e.printStackTrace();
        
    

【讨论】:

以上是关于画布上的图像到 JPEG 文件的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 画布 - 从加载的 4 波段 RGB 图像中删除 alpha 到 3 波段 JPEG 图像?

如何从 jpeg 或 png 格式的字节数组在画布上绘制图像

如何自动下载画布图像?

将图像加载到画布上并放大/缩小并移动它以适应并保存画布上的内容

PHP 载入图像 imagecreatefrom_gif_jpeg_png 系列函数

捕获完整的画布图像