CompressUtil.smali
.class public Lio/dcloud/common/util/CompressUtil;
.super Ljava/lang/Object;
# direct methods
.method public constructor <init>()V
.registers 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static compressImage(Ljava/lang/String;Ljava/lang/String;ZLandroid/content/Context;)Ljava/lang/String;
.registers 23
move-object/from16 v0, p1
const-string v1, "Orientation"
const-string v2, ""
move-object/from16 v3, p0
move-object/from16 v4, p3
.line 1
:try_start_a
invoke-static {v3, v4}, Lio/dcloud/common/util/CompressUtil;->inputStream2ByteArr(Ljava/lang/String;Landroid/content/Context;)[B
move-result-object v3
.line 2
new-instance v4, Landroid/graphics/BitmapFactory$Options;
invoke-direct {v4}, Landroid/graphics/BitmapFactory$Options;-><init>()V
const/4 v5, 0x1
.line 3
iput-boolean v5, v4, Landroid/graphics/BitmapFactory$Options;->inJustDecodeBounds:Z
.line 4
array-length v5, v3
const/4 v6, 0x0
invoke-static {v3, v6, v5, v4}, Landroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
.line 5
iput-boolean v6, v4, Landroid/graphics/BitmapFactory$Options;->inJustDecodeBounds:Z
.line 6
sget-object v5, Landroid/graphics/Bitmap$Config;->RGB_565:Landroid/graphics/Bitmap$Config;
iput-object v5, v4, Landroid/graphics/BitmapFactory$Options;->inPreferredConfig:Landroid/graphics/Bitmap$Config;
if-eqz p2, :cond_26
.line 9
sget-object v5, Landroid/graphics/Bitmap$CompressFormat;->PNG:Landroid/graphics/Bitmap$CompressFormat;
goto :goto_28
:cond_26
sget-object v5, Landroid/graphics/Bitmap$CompressFormat;->JPEG:Landroid/graphics/Bitmap$CompressFormat;
.line 10
:goto_28
iget v7, v4, Landroid/graphics/BitmapFactory$Options;->outWidth:I
const/16 v8, 0x4b
const/16 v9, 0x438
if-ge v7, v9, :cond_43
iget v10, v4, Landroid/graphics/BitmapFactory$Options;->outHeight:I
if-ge v10, v9, :cond_43
.line 11
array-length v7, v3
invoke-static {v3, v6, v7, v4}, Landroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
move-result-object v4
.line 12
new-instance v6, Ljava/io/ByteArrayOutputStream;
invoke-direct {v6}, Ljava/io/ByteArrayOutputStream;-><init>()V
.line 13
invoke-virtual {v4, v5, v8, v6}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
goto/16 :goto_d4
.line 15
:cond_43
iget v10, v4, Landroid/graphics/BitmapFactory$Options;->outHeight:I
const/high16 v11, 0x44870000 # 1080.0f
if-lt v10, v9, :cond_7f
if-lt v7, v9, :cond_7f
.line 16
new-instance v7, Landroid/graphics/Matrix;
invoke-direct {v7}, Landroid/graphics/Matrix;-><init>()V
.line 18
iget v8, v4, Landroid/graphics/BitmapFactory$Options;->outWidth:I
iget v9, v4, Landroid/graphics/BitmapFactory$Options;->outHeight:I
if-le v8, v9, :cond_58
int-to-float v8, v9
goto :goto_59
:cond_58
int-to-float v8, v8
:goto_59
div-float/2addr v11, v8
.line 23
invoke-virtual {v7, v11, v11}, Landroid/graphics/Matrix;->setScale(FF)V
.line 24
array-length v8, v3
invoke-static {v3, v6, v8, v4}, Landroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
move-result-object v12
const/4 v13, 0x0
const/4 v14, 0x0
.line 25
invoke-virtual {v12}, Landroid/graphics/Bitmap;->getWidth()I
move-result v15
invoke-virtual {v12}, Landroid/graphics/Bitmap;->getHeight()I
move-result v16
const/16 v18, 0x1
move-object/from16 v17, v7
invoke-static/range {v12 .. v18}, Landroid/graphics/Bitmap;->createBitmap(Landroid/graphics/Bitmap;IIIILandroid/graphics/Matrix;Z)Landroid/graphics/Bitmap;
move-result-object v4
.line 26
new-instance v6, Ljava/io/ByteArrayOutputStream;
invoke-direct {v6}, Ljava/io/ByteArrayOutputStream;-><init>()V
const/16 v7, 0x46
.line 27
invoke-virtual {v4, v5, v7, v6}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
goto :goto_d4
:cond_7f
int-to-float v7, v7
const/high16 v9, 0x3f800000 # 1.0f
int-to-float v10, v10
mul-float/2addr v10, v9
div-float/2addr v7, v10
const/high16 v9, 0x40000000 # 2.0f
cmpl-float v9, v7, v9
if-gtz v9, :cond_c5
float-to-double v9, v7
const-wide/high16 v12, 0x3fe0000000000000L # 0.5
cmpg-double v7, v9, v12
if-gez v7, :cond_93
goto :goto_c5
.line 36
:cond_93
new-instance v7, Landroid/graphics/Matrix;
invoke-direct {v7}, Landroid/graphics/Matrix;-><init>()V
.line 38
iget v9, v4, Landroid/graphics/BitmapFactory$Options;->outWidth:I
iget v10, v4, Landroid/graphics/BitmapFactory$Options;->outHeight:I
if-le v9, v10, :cond_a0
int-to-float v9, v9
goto :goto_a1
:cond_a0
int-to-float v9, v10
:goto_a1
div-float/2addr v11, v9
.line 43
invoke-virtual {v7, v11, v11}, Landroid/graphics/Matrix;->setScale(FF)V
.line 44
array-length v9, v3
invoke-static {v3, v6, v9, v4}, Landroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
move-result-object v12
const/4 v13, 0x0
const/4 v14, 0x0
.line 45
invoke-virtual {v12}, Landroid/graphics/Bitmap;->getWidth()I
move-result v15
invoke-virtual {v12}, Landroid/graphics/Bitmap;->getHeight()I
move-result v16
const/16 v18, 0x1
move-object/from16 v17, v7
invoke-static/range {v12 .. v18}, Landroid/graphics/Bitmap;->createBitmap(Landroid/graphics/Bitmap;IIIILandroid/graphics/Matrix;Z)Landroid/graphics/Bitmap;
move-result-object v4
.line 46
new-instance v6, Ljava/io/ByteArrayOutputStream;
invoke-direct {v6}, Ljava/io/ByteArrayOutputStream;-><init>()V
.line 47
invoke-virtual {v4, v5, v8, v6}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
goto :goto_d4
.line 48
:cond_c5
:goto_c5
array-length v7, v3
invoke-static {v3, v6, v7, v4}, Landroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
move-result-object v4
.line 49
new-instance v6, Ljava/io/ByteArrayOutputStream;
invoke-direct {v6}, Ljava/io/ByteArrayOutputStream;-><init>()V
const/16 v7, 0x49
.line 50
invoke-virtual {v4, v5, v7, v6}, Landroid/graphics/Bitmap;->compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z
:try_end_d4
.catch Ljava/lang/Exception; {:try_start_a .. :try_end_d4} :catch_137
.line 70
:goto_d4
:try_start_d4
new-instance v5, Ljava/io/File;
invoke-direct {v5, v0}, Ljava/io/File;-><init>(Ljava/lang/String;)V
.line 71
invoke-virtual {v5}, Ljava/io/File;->getParentFile()Ljava/io/File;
move-result-object v7
if-eqz v7, :cond_ef
.line 72
invoke-virtual {v7}, Ljava/io/File;->exists()Z
move-result v8
if-nez v8, :cond_ef
invoke-virtual {v7}, Ljava/io/File;->mkdirs()Z
move-result v7
:try_end_e9
.catch Ljava/lang/Exception; {:try_start_d4 .. :try_end_e9} :catch_133
.catchall {:try_start_d4 .. :try_end_e9} :catchall_12e
if-nez v7, :cond_ef
.line 91
:try_start_eb
invoke-virtual {v6}, Ljava/io/ByteArrayOutputStream;->close()V
:try_end_ee
.catch Ljava/lang/Exception; {:try_start_eb .. :try_end_ee} :catch_ee
:catch_ee
return-object v2
.line 92
:cond_ef
:try_start_ef
invoke-virtual {v5}, Ljava/io/File;->exists()Z
move-result v7
if-nez v7, :cond_ff
invoke-virtual {v5}, Ljava/io/File;->createNewFile()Z
move-result v7
:try_end_f9
.catch Ljava/lang/Exception; {:try_start_ef .. :try_end_f9} :catch_133
.catchall {:try_start_ef .. :try_end_f9} :catchall_12e
if-nez v7, :cond_ff
.line 108
:try_start_fb
invoke-virtual {v6}, Ljava/io/ByteArrayOutputStream;->close()V
:try_end_fe
.catch Ljava/lang/Exception; {:try_start_fb .. :try_end_fe} :catch_fe
:catch_fe
return-object v2
.line 109
:cond_ff
:try_start_ff
new-instance v7, Ljava/io/FileOutputStream;
invoke-direct {v7, v5}, Ljava/io/FileOutputStream;-><init>(Ljava/io/File;)V
.line 110
invoke-virtual {v6}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object v8
invoke-virtual {v7, v8}, Ljava/io/FileOutputStream;->write([B)V
.line 111
invoke-virtual {v7}, Ljava/io/FileOutputStream;->close()V
:try_end_10e
.catch Ljava/lang/Exception; {:try_start_ff .. :try_end_10e} :catch_133
.catchall {:try_start_ff .. :try_end_10e} :catchall_12e
.line 113
:try_start_10e
new-instance v2, Lio/dcloud/common/util/ExifInterface;
new-instance v7, Ljava/io/ByteArrayInputStream;
invoke-direct {v7, v3}, Ljava/io/ByteArrayInputStream;-><init>([B)V
invoke-direct {v2, v7}, Lio/dcloud/common/util/ExifInterface;-><init>(Ljava/io/InputStream;)V
.line 114
new-instance v3, Lio/dcloud/common/util/ExifInterface;
invoke-direct {v3, v5}, Lio/dcloud/common/util/ExifInterface;-><init>(Ljava/io/File;)V
.line 115
invoke-virtual {v2, v1}, Lio/dcloud/common/util/ExifInterface;->getAttribute(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
invoke-virtual {v3, v1, v2}, Lio/dcloud/common/util/ExifInterface;->setAttribute(Ljava/lang/String;Ljava/lang/String;)V
.line 116
invoke-virtual {v3}, Lio/dcloud/common/util/ExifInterface;->saveAttributes()V
:try_end_127
.catch Ljava/lang/Exception; {:try_start_10e .. :try_end_127} :catch_127
.catchall {:try_start_10e .. :try_end_127} :catchall_12e
.line 122
:catch_127
:try_start_127
invoke-virtual {v6}, Ljava/io/ByteArrayOutputStream;->close()V
:try_end_12a
.catch Ljava/lang/Exception; {:try_start_127 .. :try_end_12a} :catch_12a
.line 126
:catch_12a
:try_start_12a
invoke-virtual {v4}, Landroid/graphics/Bitmap;->recycle()V
:try_end_12d
.catch Ljava/lang/Exception; {:try_start_12a .. :try_end_12d} :catch_137
return-object v0
:catchall_12e
move-exception v0
.line 127
:try_start_12f
invoke-virtual {v6}, Ljava/io/ByteArrayOutputStream;->close()V
:try_end_132
.catch Ljava/lang/Exception; {:try_start_12f .. :try_end_132} :catch_132
.line 129
:catch_132
:try_start_132
throw v0
:try_end_133
.catch Ljava/lang/Exception; {:try_start_132 .. :try_end_133} :catch_137
.line 130
:catch_133
:try_start_133
invoke-virtual {v6}, Ljava/io/ByteArrayOutputStream;->close()V
:try_end_136
.catch Ljava/lang/Exception; {:try_start_133 .. :try_end_136} :catch_136
:catch_136
return-object v2
:catch_137
move-exception v0
.line 140
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
const/4 v0, 0x0
return-object v0
.end method
.method private static inputStream2ByteArr(Ljava/lang/String;Landroid/content/Context;)[B
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 1
new-instance v0, Ljava/io/File;
invoke-direct {v0, p0}, Ljava/io/File;-><init>(Ljava/lang/String;)V
.line 2
invoke-virtual {v0}, Ljava/io/File;->exists()Z
move-result v1
if-eqz v1, :cond_42
.line 5
:try_start_b
invoke-static {p1, p0}, Lio/dcloud/common/util/FileUtil;->checkPrivatePath(Landroid/content/Context;Ljava/lang/String;)Z
move-result p0
if-eqz p0, :cond_17
.line 6
new-instance p0, Ljava/io/FileInputStream;
invoke-direct {p0, v0}, Ljava/io/FileInputStream;-><init>(Ljava/io/File;)V
goto :goto_1b
.line 8
:cond_17
invoke-static {p1, v0}, Lio/dcloud/common/util/FileUtil;->getImageFileStream(Landroid/content/Context;Ljava/io/File;)Ljava/io/InputStream;
move-result-object p0
:goto_1b
if-nez p0, :cond_22
.line 10
new-instance p0, Ljava/io/FileInputStream;
invoke-direct {p0, v0}, Ljava/io/FileInputStream;-><init>(Ljava/io/File;)V
.line 12
:cond_22
new-instance p1, Ljava/io/ByteArrayOutputStream;
invoke-direct {p1}, Ljava/io/ByteArrayOutputStream;-><init>()V
const/16 v0, 0x400
new-array v0, v0, [B
.line 15
:goto_2b
invoke-virtual {p0, v0}, Ljava/io/InputStream;->read([B)I
move-result v1
const/4 v2, -0x1
if-eq v1, v2, :cond_37
const/4 v2, 0x0
.line 16
invoke-virtual {p1, v0, v2, v1}, Ljava/io/ByteArrayOutputStream;->write([BII)V
goto :goto_2b
.line 18
:cond_37
invoke-virtual {p0}, Ljava/io/InputStream;->close()V
.line 19
invoke-virtual {p1}, Ljava/io/ByteArrayOutputStream;->close()V
.line 20
invoke-virtual {p1}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object p0
:try_end_41
.catch Ljava/lang/Exception; {:try_start_b .. :try_end_41} :catch_42
return-object p0
:catch_42
:cond_42
const/4 p0, 0x0
return-object p0
.end method