如何将View生成图片(如PNG)?可先生成Bitmap,在通过bitmap的compress()方法 生成PNG/JPEG/WEBP
1、先生成bitmap
int viewWidth = 540; int viewHeight = 740; Bitmap bitmap = Bitmap.createBitmap(viewWidth , viewHeight , Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); view.draw(canvas);
若生成的bitmap是黑色的背景,可加上
canvas.drawColor(Color.WHITE);
或者将view的background设置为白的
viewWidth和viewHeight可根据实际要生成的尺寸来定义,Bitmap.Config.RGB_565也可自己定义
顺便在此提一下常用的Bitmap.Config.RGB_565等4种格式
ALPHA_8 :一个像素占一个字节;只保存透明度
RGB_565 :一个像素占用2个字节;
ARGB_4444:一个像素占用2个字节;
ARGB_8888 :一个像素占用4个字节
2、bitmap转成图片
File file = new File(pathPngName); FileOutputStream outputStream = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream); outputStream.flush(); outputStream.close();
compress()方法中quality处于[0, 100],100的效果最好,但是PNG是无损图片,设置quality是无效的,JPEG是可以的,但是建议quality设置50以上,否则生成的图片会很模糊
3、zip压缩
若是觉得生成的图片过大,也可以进行zip压缩一下
File zipFile = new File( "test.zip"); ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile)); zipOut.setMethod(ZipOutputStream.DEFLATED); zipOut.setLevel(Deflater.BEST_COMPRESSION); File folderToZip = new File(pathPngName); zipFile(folderToZip, zipOut); zipOut.closeEntry(); zipOut.close();
public static void zipFile(File srcFile, ZipOutputStream zipOut) throws IOException { ZipEntry ze = new ZipEntry(srcFile.getName()); zipOut.putNextEntry(ze); // 读取文件内容,并将其写入zip文件 FileInputStream fis = new FileInputStream(srcFile); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) > 0) { zipOut.write(buffer, 0, len); } fis.close(); }