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