图片操作工具包

public class ImageUtils {



    public final static String SDCARD_MNT = "/mnt/sdcard";

    public final static String SDCARD = "/sdcard";



    /** 请求相册 */

    public static final int REQUEST_CODE_GETIMAGE_BYSDCARD = 0;

    /** 请求相机 */

    public static final int REQUEST_CODE_GETIMAGE_BYCAMERA = 1;

    /** 请求裁剪 */

    public static final int REQUEST_CODE_GETIMAGE_BYCROP = 2;



    /**

     * 写图片文件 在Android系统中,文件保存在 /data/data/PACKAGE_NAME/files 目录下

     * 

     * @throws IOException

     */

    public static void saveImage(Context context, String fileName, Bitmap bitmap)

            throws IOException {

        saveImage(context, fileName, bitmap, 100);

    }



    public static void saveImage(Context context, String fileName,

            Bitmap bitmap, int quality) throws IOException {

        if (bitmap == null || fileName == null || context == null)

            return;



        FileOutputStream fos = context.openFileOutput(fileName,

                Context.MODE_PRIVATE);

        ByteArrayOutputStream stream = new ByteArrayOutputStream();

        bitmap.compress(CompressFormat.JPEG, quality, stream);

        byte[] bytes = stream.toByteArray();

        fos.write(bytes);

        fos.close();

    }



    /**

     * 写图片文件到SD卡

     * 

     * @throws IOException

     */

    public static void saveImageToSD(Context ctx, String filePath,

            Bitmap bitmap, int quality) throws IOException {

        if (bitmap != null) {

            File file = new File(filePath.substring(0,

                    filePath.lastIndexOf(File.separator)));

            if (!file.exists()) {

                file.mkdirs();

            }

            BufferedOutputStream bos = new BufferedOutputStream(

                    new FileOutputStream(filePath));

            bitmap.compress(CompressFormat.JPEG, quality, bos);

            bos.flush();

            bos.close();

            if (ctx != null) {

                scanPhoto(ctx, filePath);

            }

        }

    }



    public static void saveBackgroundImage(Context ctx, String filePath,

            Bitmap bitmap, int quality) throws IOException {

        if (bitmap != null) {

            File file = new File(filePath.substring(0,

                    filePath.lastIndexOf(File.separator)));

            if (!file.exists()) {

                file.mkdirs();

            }

            BufferedOutputStream bos = new BufferedOutputStream(

                    new FileOutputStream(filePath));

            bitmap.compress(CompressFormat.PNG, quality, bos);

            bos.flush();

            bos.close();

            if (ctx != null) {

                scanPhoto(ctx, filePath);

            }

        }

    }



    /**

     * 让Gallery上能马上看到该图片

     */

    private static void scanPhoto(Context ctx, String imgFileName) {

        Intent mediaScanIntent = new Intent(

                Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);

        File file = new File(imgFileName);

        Uri contentUri = Uri.fromFile(file);

        mediaScanIntent.setData(contentUri);

        ctx.sendBroadcast(mediaScanIntent);

    }



    /**

     * 获取bitmap

     * 

     * @param context

     * @param fileName

     * @return

     */

    public static Bitmap getBitmap(Context context, String fileName) {

        FileInputStream fis = null;

        Bitmap bitmap = null;

        try {

            fis = context.openFileInput(fileName);

            bitmap = BitmapFactory.decodeStream(fis);

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (OutOfMemoryError e) {

            e.printStackTrace();

        } finally {

            try {

                fis.close();

            } catch (Exception e) {

            }

        }

        return bitmap;

    }



    /**

     * 获取bitmap

     * 

     * @param filePath

     * @return

     */

    public static Bitmap getBitmapByPath(String filePath) {

        return getBitmapByPath(filePath, null);

    }



    public static Bitmap getBitmapByPath(String filePath,

            BitmapFactory.Options opts) {

        FileInputStream fis = null;

        Bitmap bitmap = null;

        try {

            File file = new File(filePath);

            fis = new FileInputStream(file);

            bitmap = BitmapFactory.decodeStream(fis, null, opts);

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (OutOfMemoryError e) {

            e.printStackTrace();

        } finally {

            try {

                fis.close();

            } catch (Exception e) {

            }

        }

        return bitmap;

    }



    /**

     * 获取bitmap

     * 

     * @param file

     * @return

     */

    public static Bitmap getBitmapByFile(File file) {

        FileInputStream fis = null;

        Bitmap bitmap = null;

        try {

            fis = new FileInputStream(file);

            bitmap = BitmapFactory.decodeStream(fis);

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (OutOfMemoryError e) {

            e.printStackTrace();

        } finally {

            try {

                fis.close();

            } catch (Exception e) {

            }

        }

        return bitmap;

    }



    /**

     * 使用当前时间戳拼接一个唯一的文件名

     * 

     * @param format

     * @return

     */

    public static String getTempFileName() {

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss_SS");

        String fileName = format.format(new Timestamp(System

                .currentTimeMillis()));

        return fileName;

    }



    /**

     * 获取照相机使用的目录

     * 

     * @return

     */

    public static String getCamerPath() {

        return Environment.getExternalStorageDirectory() + File.separator

                + "FounderNews" + File.separator;

    }



    /**

     * 判断当前Url是否标准的content://样式,如果不是,则返回绝对路径

     * 

     * @param uri

     * @return

     */

    public static String getAbsolutePathFromNoStandardUri(Uri mUri) {

        String filePath = null;



        String mUriString = mUri.toString();

        mUriString = Uri.decode(mUriString);



        String pre1 = "file://" + SDCARD + File.separator;

        String pre2 = "file://" + SDCARD_MNT + File.separator;



        if (mUriString.startsWith(pre1)) {

            filePath = Environment.getExternalStorageDirectory().getPath()

                    + File.separator + mUriString.substring(pre1.length());

        } else if (mUriString.startsWith(pre2)) {

            filePath = Environment.getExternalStorageDirectory().getPath()

                    + File.separator + mUriString.substring(pre2.length());

        }

        return filePath;

    }



    /**

     * 通过uri获取文件的绝对路径

     * 

     * @param uri

     * @return

     */

    @SuppressWarnings("deprecation")

    public static String getAbsoluteImagePath(Activity context, Uri uri) {

        String imagePath = "";

        String[] proj = { MediaStore.Images.Media.DATA };

        Cursor cursor = context.managedQuery(uri, proj, // Which columns to

                                                        // return

                null, // WHERE clause; which rows to return (all rows)

                null, // WHERE clause selection arguments (none)

                null); // Order-by clause (ascending by name)



        if (cursor != null) {

            int column_index = cursor

                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

            if (cursor.getCount() > 0 && cursor.moveToFirst()) {

                imagePath = cursor.getString(column_index);

            }

        }



        return imagePath;

    }



    /**

     * 获取图片缩略图 只有Android2.1以上版本支持

     * 

     * @param imgName

     * @param kind

     *            MediaStore.Images.Thumbnails.MICRO_KIND

     * @return

     */

    @SuppressWarnings("deprecation")

    public static Bitmap loadImgThumbnail(Activity context, String imgName,

            int kind) {

        Bitmap bitmap = null;



        String[] proj = { MediaStore.Images.Media._ID,

                MediaStore.Images.Media.DISPLAY_NAME };



        Cursor cursor = context.managedQuery(

                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj,

                MediaStore.Images.Media.DISPLAY_NAME + "='" + imgName + "'",

                null, null);



        if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {

            ContentResolver crThumb = context.getContentResolver();

            BitmapFactory.Options options = new BitmapFactory.Options();

            options.inSampleSize = 1;

            bitmap = MethodsCompat.getThumbnail(crThumb, cursor.getInt(0),

                    kind, options);

        }

        return bitmap;

    }



    public static Bitmap loadImgThumbnail(String filePath, int w, int h) {

        Bitmap bitmap = getBitmapByPath(filePath);

        return zoomBitmap(bitmap, w, h);

    }



    /**

     * 获取SD卡中最新图片路径

     * 

     * @return

     */

    public static String getLatestImage(Activity context) {

        String latestImage = null;

        String[] items = { MediaStore.Images.Media._ID,

                MediaStore.Images.Media.DATA };

        Cursor cursor = context.managedQuery(

                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, items, null,

                null, MediaStore.Images.Media._ID + " desc");



        if (cursor != null && cursor.getCount() > 0) {

            cursor.moveToFirst();

            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor

                    .moveToNext()) {

                latestImage = cursor.getString(1);

                break;

            }

        }



        return latestImage;

    }



    /**

     * 计算缩放图片的宽高

     * 

     * @param img_size

     * @param square_size

     * @return

     */

    public static int[] scaleImageSize(int[] img_size, int square_size) {

        if (img_size[0] <= square_size && img_size[1] <= square_size)

            return img_size;

        double ratio = square_size

                / (double) Math.max(img_size[0], img_size[1]);

        return new int[] { (int) (img_size[0] * ratio),

                (int) (img_size[1] * ratio) };

    }



    /**

     * 创建缩略图

     * 

     * @param context

     * @param largeImagePath

     *            原始大图路径

     * @param thumbfilePath

     *            输出缩略图路径

     * @param square_size

     *            输出图片宽度

     * @param quality

     *            输出图片质量

     * @throws IOException

     */

    public static void createImageThumbnail(Context context,

            String largeImagePath, String thumbfilePath, int square_size,

            int quality) throws IOException {

        BitmapFactory.Options opts = new BitmapFactory.Options();

        opts.inSampleSize = 1;

        // 原始图片bitmap

        Bitmap cur_bitmap = getBitmapByPath(largeImagePath, opts);



        if (cur_bitmap == null)

            return;



        // 原始图片的高宽

        int[] cur_img_size = new int[] { cur_bitmap.getWidth(),

                cur_bitmap.getHeight() };

        // 计算原始图片缩放后的宽高

        int[] new_img_size = scaleImageSize(cur_img_size, square_size);

        // 生成缩放后的bitmap

        Bitmap thb_bitmap = zoomBitmap(cur_bitmap, new_img_size[0],

                new_img_size[1]);

        // 生成缩放后的图片文件

        saveImageToSD(null, thumbfilePath, thb_bitmap, quality);

    }



    /**

     * 放大缩小图片

     * 

     * @param bitmap

     * @param w

     * @param h

     * @return

     */

    public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {

        Bitmap newbmp = null;

        if (bitmap != null) {

            int width = bitmap.getWidth();

            int height = bitmap.getHeight();

            Matrix matrix = new Matrix();

            float scaleWidht = ((float) w / width);

            float scaleHeight = ((float) h / height);

            matrix.postScale(scaleWidht, scaleHeight);

            newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix,

                    true);

        }

        return newbmp;

    }



    public static Bitmap scaleBitmap(Bitmap bitmap) {

        // 获取这个图片的宽和高

        int width = bitmap.getWidth();

        int height = bitmap.getHeight();

        // 定义预转换成的图片的宽度和高度

        int newWidth = 200;

        int newHeight = 200;

        // 计算缩放率,新尺寸除原始尺寸

        float scaleWidth = ((float) newWidth) / width;

        float scaleHeight = ((float) newHeight) / height;

        // 创建操作图片用的matrix对象

        Matrix matrix = new Matrix();

        // 缩放图片动作

        matrix.postScale(scaleWidth, scaleHeight);

        // 旋转图片 动作

        // matrix.postRotate(45);

        // 创建新的图片

        Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height,

                matrix, true);

        return resizedBitmap;

    }



    /**

     * (缩放)重绘图片

     * 

     * @param context

     *            Activity

     * @param bitmap

     * @return

     */

    public static Bitmap reDrawBitMap(Activity context, Bitmap bitmap) {

        DisplayMetrics dm = new DisplayMetrics();

        context.getWindowManager().getDefaultDisplay().getMetrics(dm);

        int rHeight = dm.heightPixels;

        int rWidth = dm.widthPixels;

        // float rHeight=dm.heightPixels/dm.density+0.5f;

        // float rWidth=dm.widthPixels/dm.density+0.5f;

        // int height=bitmap.getScaledHeight(dm);

        // int width = bitmap.getScaledWidth(dm);

        int height = bitmap.getHeight();

        int width = bitmap.getWidth();

        float zoomScale;



        /** 方式3 **/

        if (width >= rWidth)

            zoomScale = ((float) rWidth) / width;

        else

            zoomScale = 1.0f;

        // 创建操作图片用的matrix对象

        Matrix matrix = new Matrix();

        // 缩放图片动作

        matrix.postScale(zoomScale, zoomScale);

        Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,

                bitmap.getWidth(), bitmap.getHeight(), matrix, true);

        return resizedBitmap;

    }



    /**

     * 将Drawable转化为Bitmap

     * 

     * @param drawable

     * @return

     */

    public static Bitmap drawableToBitmap(Drawable drawable) {

        int width = drawable.getIntrinsicWidth();

        int height = drawable.getIntrinsicHeight();

        Bitmap bitmap = Bitmap.createBitmap(width, height, drawable

                .getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888

                : Bitmap.Config.RGB_565);

        Canvas canvas = new Canvas(bitmap);

        drawable.setBounds(0, 0, width, height);

        drawable.draw(canvas);

        return bitmap;



    }



    /**

     * 获得圆角图片的方法

     * 

     * @param bitmap

     * @param roundPx

     *            一般设成14

     * @return

     */

    public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {



        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),

                bitmap.getHeight(), Config.ARGB_8888);

        Canvas canvas = new Canvas(output);



        final int color = 0xff424242;

        final Paint paint = new Paint();

        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

        final RectF rectF = new RectF(rect);



        paint.setAntiAlias(true);

        canvas.drawARGB(0, 0, 0, 0);

        paint.setColor(color);

        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);



        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));

        canvas.drawBitmap(bitmap, rect, rect, paint);



        return output;

    }



    /**

     * 获得带倒影的图片方法

     * 

     * @param bitmap

     * @return

     */

    public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {

        final int reflectionGap = 4;

        int width = bitmap.getWidth();

        int height = bitmap.getHeight();



        Matrix matrix = new Matrix();

        matrix.preScale(1, -1);



        Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height / 2,

                width, height / 2, matrix, false);



        Bitmap bitmapWithReflection = Bitmap.createBitmap(width,

                (height + height / 2), Config.ARGB_8888);



        Canvas canvas = new Canvas(bitmapWithReflection);

        canvas.drawBitmap(bitmap, 0, 0, null);

        Paint deafalutPaint = new Paint();

        canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);



        canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);



        Paint paint = new Paint();

        LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,

                bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,

                0x00ffffff, TileMode.CLAMP);

        paint.setShader(shader);

        // Set the Transfer mode to be porter duff and destination in

        paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

        // Draw a rectangle using the paint with our linear gradient

        canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()

                + reflectionGap, paint);



        return bitmapWithReflection;

    }



    /**

     * 将bitmap转化为drawable

     * 

     * @param bitmap

     * @return

     */

    public static Drawable bitmapToDrawable(Bitmap bitmap) {

        Drawable drawable = new BitmapDrawable(bitmap);

        return drawable;

    }



    /**

     * 获取图片类型

     * 

     * @param file

     * @return

     */

    public static String getImageType(File file) {

        if (file == null || !file.exists()) {

            return null;

        }

        InputStream in = null;

        try {

            in = new FileInputStream(file);

            String type = getImageType(in);

            return type;

        } catch (IOException e) {

            return null;

        } finally {

            try {

                if (in != null) {

                    in.close();

                }

            } catch (IOException e) {

            }

        }

    }



    /**

     * 获取图片的类型信息

     * 

     * @param in

     * @return

     * @see #getImageType(byte[])

     */

    public static String getImageType(InputStream in) {

        if (in == null) {

            return null;

        }

        try {

            byte[] bytes = new byte[8];

            in.read(bytes);

            return getImageType(bytes);

        } catch (IOException e) {

            return null;

        }

    }



    /**

     * 获取图片的类型信息

     * 

     * @param bytes

     *            2~8 byte at beginning of the image file

     * @return image mimetype or null if the file is not image

     */

    public static String getImageType(byte[] bytes) {

        if (isJPEG(bytes)) {

            return "image/jpeg";

        }

        if (isGIF(bytes)) {

            return "image/gif";

        }

        if (isPNG(bytes)) {

            return "image/png";

        }

        if (isBMP(bytes)) {

            return "application/x-bmp";

        }

        return null;

    }



    private static boolean isJPEG(byte[] b) {

        if (b.length < 2) {

            return false;

        }

        return (b[0] == (byte) 0xFF) && (b[1] == (byte) 0xD8);

    }



    private static boolean isGIF(byte[] b) {

        if (b.length < 6) {

            return false;

        }

        return b[0] == 'G' && b[1] == 'I' && b[2] == 'F' && b[3] == '8'

                && (b[4] == '7' || b[4] == '9') && b[5] == 'a';

    }



    private static boolean isPNG(byte[] b) {

        if (b.length < 8) {

            return false;

        }

        return (b[0] == (byte) 137 && b[1] == (byte) 80 && b[2] == (byte) 78

                && b[3] == (byte) 71 && b[4] == (byte) 13 && b[5] == (byte) 10

                && b[6] == (byte) 26 && b[7] == (byte) 10);

    }



    private static boolean isBMP(byte[] b) {

        if (b.length < 2) {

            return false;

        }

        return (b[0] == 0x42) && (b[1] == 0x4d);

    }



    /**

     * 获取图片路径 2014年8月12日

     * 

     * @param uri

     * @param cursor

     * @return E-mail:[email protected]

     */

    public static String getImagePath(Uri uri, Activity context) {



        String[] projection = { MediaColumns.DATA };

        Cursor cursor = context.getContentResolver().query(uri, projection,

                null, null, null);

        if (cursor != null) {

            cursor.moveToFirst();

            int columIndex = cursor.getColumnIndexOrThrow(MediaColumns.DATA);

            String ImagePath = cursor.getString(columIndex);

            cursor.close();

            return ImagePath;

        }



        return uri.toString();

    }



    static Bitmap bitmap = null;

    /**

     *2014年8月13日

     *@param uri

     *@param context

     * E-mail:[email protected]

     */

    public static Bitmap loadPicasaImageFromGalley(final Uri uri, final Activity context) {

        

        String[] projection = { MediaColumns.DATA, MediaColumns.DISPLAY_NAME };

        Cursor cursor = context.getContentResolver().query(uri, projection,

                null, null, null);

        if (cursor != null) {

            cursor.moveToFirst();



            int columIndex = cursor.getColumnIndex(MediaColumns.DISPLAY_NAME);

            if (columIndex != -1) {

                new Thread(new Runnable() {



                    @Override

                    public void run() {

                        try {

                            bitmap = android.provider.MediaStore.Images.Media

                                    .getBitmap(context.getContentResolver(),

                                            uri);

                        } catch (FileNotFoundException e) {

                            e.printStackTrace();

                        } catch (IOException e) {

                            e.printStackTrace();

                        }



                    }

                }).start();

            }

            cursor.close();

            return bitmap;

        }else

            return null;

    }

}

 

你可能感兴趣的:(图片)