图片(bitmap)转化为byte[],并上传到服务器

压缩为3:1bitmap

/**
     * 压缩bitmap
     *
     * @param bitmap
     * @return
     */
    private Bitmap compressBitmap(Bitmap bitmap) {
        // 创建操作图片用的matrix对象
        Matrix matrix = new Matrix();
        matrix.postScale((float) 300 / bitmap.getWidth(),
                (float) 100 / bitmap.getHeight());

        Log.e("", "bitmap_width" + bitmap.getWidth());
        Log.e("", "bitmap_height" + bitmap.getHeight());
        Bitmap compressBitmap = Bitmap.createBitmap(bitmap, 0, 0,
                bitmap.getWidth(), bitmap.getHeight(), matrix, true);
        return compressBitmap;
    }

上传压缩后的bitmap

private void eleSignature() {
        WritePadDialog writeTabletDialog = new WritePadDialog(
                this, new DialogListener() {
            public void refreshActivity(Object object) {
                Bitmap mSignBitmap = (Bitmap) object;
                mSignBitmap = compressBitmap(mSignBitmap);

//                Bitmap newsrcImage = mSignBitmap.copy(Bitmap.Config.RGB_565, true);
                saveBmp(mSignBitmap);
                Log.e("", "after  bitmap_width:" + mSignBitmap.getWidth());
                Log.e("", "after  bitmap_height:" + mSignBitmap.getHeight());
                File file = new File(file_name);
                Log.e("Jeny", "file.exists():" + file.exists());
                if (!file.exists()) {
                    return;
                }
                byte[] eleSignatureData = null;
                try {
                    eleSignatureData = InputStreamTOByte();
                } catch (IOException e) {

                }
                Log.e("Jeny", "eleSignatureData:" + eleSignatureData.length);
                if (eleSignatureData == null) {
                    return;
                }

//                byte[] eleSignatureData = InputStreamTOByte();
//                byte[] eleSignatureData = Bitmap2Bytes(newsrcImage);
                mController.startSavingElecSignatureDataOfSDPay(SalesCollectActivity.this, voucherNo, eleSignatureData);
                mSignBitmap.recycle();
            }

        }
        );
        writeTabletDialog.setCanceledOnTouchOutside(false);
        writeTabletDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialogInterface, int keyCode, KeyEvent keyEvent) {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    return true;
                } else {
                    return false; //默认返回 false
                }
            }
        });
        writeTabletDialog.show();
    }

    /**
     * 将InputStream转换成byte数组
     * <p/>
     * InputStream
     *
     * @return byte[]
     * @throws IOException
     */
    @SuppressWarnings("resource")
    public byte[] InputStreamTOByte() throws IOException {
        File file = new File(file_name);
        if (!file.exists()) {
            return null;
        }
        FileInputStream is = new FileInputStream(file_name);
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] data = new byte[BUFFER_SIZE];
        int count = -1;
        while ((count = is.read(data, 0, BUFFER_SIZE)) != -1)
            outStream.write(data, 0, count);
        // data = null;
        byte[] alldata = outStream.toByteArray();

        /**top = new byte[62];
         for (int i = 0; i < 62; i++)
         {
         top[i] = alldata[i];
         }
         writefile(top_name, top);
         */

//        byte[] other = new byte[alldata.length - 62];
//        for (int i = 0; i < (alldata.length - 62); i++)
//        {
//            other[i] = alldata[i + 62];
//        }
        /*
         * String b =
		 * Environment.getExternalStorageDirectory().getPath()+"/other.txt";
		 * writefile(b, other);
		 */
        return alldata;
    }


    /**
     * @param bitmap 图片以bmp格式存储的方法
     */
    private void saveBmp(Bitmap bitmap) {
        if (bitmap == null)
            return;

        // 位图大小
        int nBmpWidth = bitmap.getWidth();
        int nBmpHeight = bitmap.getHeight();

        int DataSizePerLine = 40;
        // 图像数据大小
        int bufferSize = nBmpHeight * DataSizePerLine;

        try {
            // 存储文件名

            File file = new File(file_name);
            Log.i("SurFace", "filename:" + file_name);
            if (!file.exists()) {
                file.createNewFile();
            }
            FileOutputStream fileos = new FileOutputStream(file_name);

            // bmp文件头
            int bfType = 0x4d42;
            long bfSize = 14 + 40 + 8 + bufferSize;
            int bfReserved1 = 0;
            int bfReserved2 = 0;
            long bfOffBits = 14 + 40 + 8;

            // 保存bmp文件头
            writeWord(fileos, bfType);
            writeDword(fileos, bfSize);
            writeWord(fileos, bfReserved1);
            writeWord(fileos, bfReserved2);
            writeDword(fileos, bfOffBits);

            // bmp信息头
            long biSize = 40L;
            long biWidth = nBmpWidth;
            long biHeight = nBmpHeight;
            int biPlanes = 1;
            int biBitCount = 1;
            long biCompression = 0L;
            long biSizeImage = 0L;
            long biXpelsPerMeter = 0L;
            long biYPelsPerMeter = 0L;
            long biClrUsed = 0L;
            long biClrImportant = 0L;

            // 保存bmp信息头
            writeDword(fileos, biSize);
            writeLong(fileos, biWidth);
            writeLong(fileos, biHeight);
            writeWord(fileos, biPlanes);
            writeWord(fileos, biBitCount);
            writeDword(fileos, biCompression);
            writeDword(fileos, biSizeImage);
            writeLong(fileos, biXpelsPerMeter);
            writeLong(fileos, biYPelsPerMeter);
            writeDword(fileos, biClrUsed);
            writeDword(fileos, biClrImportant);

            // 调色板
            byte[] c = new byte[4];
            c[0] = 0;
            c[1] = 0;
            c[2] = 0;
            c[3] = 0;
            fileos.write(c);
            byte[] w = new byte[4];
            w[0] = (byte) 255;
            w[1] = (byte) 255;
            w[2] = (byte) 255;
            w[3] = 0;
            fileos.write(w);

            int wWidth = DataSizePerLine;
            // 像素扫描
            byte bmpData[] = new byte[bufferSize];
            for (int ibuf = 0; ibuf < bufferSize; ibuf++)
                bmpData[ibuf] = (byte) 0xff;

            int iByte = 0;
            int iCount = 0;
            byte bPix = 0;
            for (int nCol = nBmpHeight - 1, nRealCol = nBmpHeight; nCol > 0; nCol--, nRealCol--) {
                wWidth = DataSizePerLine;
                iCount = 0;
                iByte = 0;
                for (int wRow = 0; wRow < nBmpWidth; wRow++) {
                    int clr = bitmap.getPixel(wRow, nCol);

                    int r = (clr | 0xff00ffff) >> 16 & 0x00ff;
                    int g = Color.green(clr);
                    int b = Color.blue(clr);
                    // byte a = (byte) Color.blue(clr);
                    // byte b = (byte) Color.green(clr);
                    // byte d = (byte) Color.red(clr);
                    // System.out.println("r:"+r);
                    if (r != 255 || g != 255 || b != 255)// 黑色
                    {
                        // bPix = (byte)(bPix & (0x7f>>iByte |
                        // 0x7f<<(8-iByte)));
                        bPix = (byte) (bPix & ~(byte) Math.pow(2, iByte));
                        // System.out.println( " 黑色 " + bPix );
                    } else {

                        // bPix = (byte)(bPix & (0xff>>iByte |
                        // 0xff<<(8-iByte)));

                        bPix = (byte) (bPix | (byte) Math.pow(2, iByte));
                        // System.out.println( " 白色  " + bPix);
                    }

                    if (iCount != 0 && iCount % 8 == 0) {
                        bmpData[nRealCol * wWidth - wRow / 8] = bPix;
                        iByte = 0;
                    } else {
                        iByte++;
                    }
                    iCount++;
                    /*
                     * //if(a==b && b==d && a>0) if (nRealCol%2 == 0) { //为白色
					 * bmpData[nRealCol * wWidth] = (byte)255; }else{ //为黑色
					 * bmpData[nRealCol * wWidth] = 0; }
					 */
                    // Arrays.fill(x, value);
                    /*
                     * bmpData[nRealCol * wWidth + wByteIdex] = (byte) Color .b;
					 * bmpData[nRealCol * wWidth + wByteIdex + 1] = (byte) Color
					 * .green(clr); bmpData[nRealCol * wWidth + wByteIdex + 2] =
					 * (byte) Color .red(clr);
					 */
                }
            }
            // System.out.println( " iCount= " + iCount);
            /*
             * byte[] writeByte = new byte[bmpData.length]; for(int
			 * i=0;i<writeByte.length;i++){ writeByte[i] =
			 * bmpData[bmpData.length-i-1]; }
			 */
            fileos.write(bmpData);
            fileos.flush();
            fileos.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    protected void writeWord(FileOutputStream stream, int value)
            throws IOException {
        byte[] b = new byte[2];
        b[0] = (byte) (value & 0xff);
        b[1] = (byte) (value >> 8 & 0xff);

        stream.write(b);
    }

    protected void writeDword(FileOutputStream stream, long value)
            throws IOException {
        byte[] b = new byte[4];
        b[0] = (byte) (value & 0xff);
        b[1] = (byte) (value >> 8 & 0xff);
        b[2] = (byte) (value >> 16 & 0xff);
        b[3] = (byte) (value >> 24 & 0xff);

        stream.write(b);
    }

    protected void writeLong(FileOutputStream stream, long value)
            throws IOException {
        byte[] b = new byte[4];
        b[0] = (byte) (value & 0xff);
        b[1] = (byte) (value >> 8 & 0xff);
        b[2] = (byte) (value >> 16 & 0xff);
        b[3] = (byte) (value >> 24 & 0xff);

        stream.write(b);
    }

    /**
     * 压缩bitmap
     *
     * @param bitmap
     * @return
     */
    private Bitmap compressBitmap(Bitmap bitmap) {
        // 创建操作图片用的matrix对象
        Matrix matrix = new Matrix();
        matrix.postScale((float) 300 / bitmap.getWidth(),
                (float) 100 / bitmap.getHeight());

        Log.e("", "bitmap_width" + bitmap.getWidth());
        Log.e("", "bitmap_height" + bitmap.getHeight());
        Bitmap compressBitmap = Bitmap.createBitmap(bitmap, 0, 0,
                bitmap.getWidth(), bitmap.getHeight(), matrix, true);
        return compressBitmap;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值