序文
最近では、プロジェクトに電子署名機能があり、お客様の手書き署名を必要とし、それをローカルに保存してクラウドにアップロードします。
//获取bitmap
Bitmap bitmapFromView = mSignatureView.getBitmapFromView();
BitmapUtil.saveImageToGallery(this, bitmapFromView);
压缩为JPEG格式
以前に使用したsaveImageToGalleryメソッドを変更しました。Bitmap.CompressFormat.JPEG
压缩为WEBP无损格式
主な変更内容は、ビットマップの圧縮画像の形式を変更することです。Bitmap.CompressFormat.WEBP_LOSSLESS
ソース コードを表示すると、CompressFormat 列挙クラスが表示されます。
public enum CompressFormat {
/**
* 压缩为JPEG格式
* 压缩到最小尺寸
*/
JPEG (0),
/**
*压缩为PNG格式。
*/
PNG (1),
/**
*压缩为WEBP格式。
*/
WEBP (2),
/**
*压缩为WEBP有损格式
*/
WEBP_LOSSY (3),
/**
*压缩为WEBP无损格式。
*/
WEBP_LOSSLESS (4);
CompressFormat(int nativeInt) {
this.nativeInt = nativeInt;
}
final int nativeInt;
}
ローカルに保存
ビットマップをローカルに保存するには、新しいディレクトリを生成する必要があります。ディレクトリがない場合は、新しいフォルダを作成します。
次に、ビットマップ イメージの生成形式を に変更します。
bmp.compress(Bitmap.CompressFormat.WEBP_LOSSLESS, 100, fos);
最後にアルバムを更新します
MediaScannerConnection.scanFile
/**
* 保存图片到相册
*
* @param context 应用程序上下文
* @param bmp 需要保存的 bitmap
*/
public static void saveImageToGallery(Context context, Bitmap bmp) {
File appDir = new File(Environment.getExternalStorageDirectory(), "Pictures");
if (!appDir.exists()) {
appDir.mkdirs();
}
String fileName = "photo_" + System.currentTimeMillis() + ".png";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.WEBP_LOSSLESS, 100, fos);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
MediaScannerConnection.scanFile(context,
new String[]{
file.toString()}, null, null);
}
背景が黒くなるのを解決する
キャンバスを使用して、写真や手書きの電子署名を撮影して生成されたビットマップの背景色を変更します。
Bitmap newBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(newBitmap);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(bitmap, 0, 0, null);