1. 程式人生 > 實用技巧 >react native mapbox 截圖壓縮(@react-native-mapbox-gl\maps)

react native mapbox 截圖壓縮(@react-native-mapbox-gl\maps)

修改map.takeSnap(false)方法原始碼,修改前衛星地圖的截圖檔案大小3.6M修改後截圖壓縮到130k

android :
原始碼路徑 node_modules@react-native-mapbox-gl\maps\android\rctmgl\src\main\java\com\mapbox\rctmgl\utils\BitmapUtils.java

public static String createBase64(Bitmap bitmap) {
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    //bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);  
    bitmap.compress(Bitmap.CompressFormat.JPEG, 50, outputStream);//檔案型別修改成JPEG 質量修改成50
    byte[] bitmapBytes = outputStream.toByteArray();
    closeSnapshotOutputStream(outputStream);
    //String base64Prefix = "data:image/png;base64,";
    String base64Prefix = "data:image/jpeg;base64,";//檔案型別修改成JPEG 
    return base64Prefix + Base64.encodeToString(bitmapBytes, Base64.NO_WRAP);
    

ios:
原始碼路徑 node_modules@react-native-mapbox-gl\maps\ios\RCTMGL\RNMBImageUtils.m

+ (NSString *)createBase64:(UIImage *)image
{
    //NSData *data = UIImagePNGRepresentation(image);
      NSData *data = UIImageJPEGRepresentation(image,0.5);//檔案型別修改成JPEG 質量修改成0.5
    //return [NSString stringWithFormat:@"%@%@",  @"data:image/png;base64,", [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn]];
      return [NSString stringWithFormat:@"%@%@",  @"data:image/jpeg;base64,", [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn]];//檔案型別修改成JPEG
}