android图片处理工具类

public byte[] getPhotoWithPath(String filePath) {

		String SDPath = Environment.getExternalStorageDirectory() + "/";
		String path = SDPath + filePath;

		// 根据路径获取图片
		File mfile = new File(path);
		if (mfile.exists()) {// 若该文件存在
			Bitmap bmp = BitmapFactory.decodeFile(path);
			return decodeBitmap(bmp);
		} else {
			Log.e("PrintTools_58mm", "the file isn't exists");
		}
		return null;
	}

	/**
	 * print photo in assets 打印assets里的图片
	 * 
	 * @param 图片在assets目录
	 *            ,如:pic.bmp
	 * */
	public byte[] getPhotoInAssets(Context context, String fileName) {

		AssetManager asm = context.getResources().getAssets();
		InputStream is;
		try {
			is = asm.open(fileName);
			Bitmap bmp = BitmapFactory.decodeStream(is);
			is.close();
			if (bmp != null) {
				byte[] command = decodeBitmap(bmp);
				return command;
			} else {
				Log.e("PrintTools", "the file isn't exists");
			}
		} catch (IOException e) {
			e.printStackTrace();
			Log.e("PrintTools", "the file isn't exists");
		}
		return null;
	}

	

	/**
	 * 
	 * @param bitmap
	 * @param widthScale 宽度缩放比例
	 * @param hightScale 长度缩放比例
	 * @return
	 */
	public static Bitmap scale(Bitmap bitmap,float widthScale,float hightScale) {
		Matrix matrix = new Matrix();
		matrix.postScale(widthScale, hightScale); // 长和宽放大缩小的比例
		Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
				bitmap.getHeight(), matrix, true);
		return resizeBmp;
	}
	

	/** */  
	/**  
	* 图片去色,返回灰度图片  
	*   
	* @param bmpOriginal 传入的图片  
	* @return 去色后的图片  
	*/  
	public static Bitmap toGrayscale(Bitmap bmpOriginal) {   
	int width, height;   
	height = bmpOriginal.getHeight();   
	width = bmpOriginal.getWidth();   
	Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);   
	Canvas c = new Canvas(bmpGrayscale);   
	Paint paint = new Paint();   
	ColorMatrix cm = new ColorMatrix();   
	cm.setSaturation(0);   
	ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);   
	paint.setColorFilter(f);   
	c.drawBitmap(bmpOriginal, 0, 0, paint);   
	return bmpGrayscale;   
	}   
	


	/**  
	* 读取路径中的图片,然后将其转化为缩放后的bitmap  
	*   
	* @param path  
	*/  
	public static void saveBefore(String path) {   
	BitmapFactory.Options options = new BitmapFactory.Options();   
	options.inJustDecodeBounds = true;   
	// 获取这个图片的宽和高   
	Bitmap bitmap = BitmapFactory.decodeFile(path, options); // 此时返回bm为空   
	options.inJustDecodeBounds = false;   
	// 计算缩放比   
	int be = (int)(options.outHeight / (float)200);   
	if (be <= 0)   
	be = 1;   
	options.inSampleSize = 2; // 图片长宽各缩小二分之一   
	// 重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦   
	bitmap = BitmapFactory.decodeFile(path, options);   
	int w = bitmap.getWidth();   
	int h = bitmap.getHeight();   
	System.out.println(w + " " + h);   
	// savePNG_After(bitmap,path);   
	saveJPGE_After(bitmap, path);   
	}   
	/**  
	* 保存图片为PNG  
	*   
	* @param bitmap  
	* @param name  
	*/  
	public static void savePNG_After(Bitmap bitmap, String name) {   
	File file = new File(name);   
	try {   
	FileOutputStream out = new FileOutputStream(file);   
	if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)) {   
	out.flush();   
	out.close();   
	}   
	} catch (FileNotFoundException e) {   
	e.printStackTrace();   
	} catch (IOException e) {   
	e.printStackTrace();   
	}   
	}   
	/**  
	* 保存图片为JPEG  
	*   
	* @param bitmap  
	* @param path  
	*/  
	public static void saveJPGE_After(Bitmap bitmap, String path) {   
	File file = new File(path);   
	try {   
	FileOutputStream out = new FileOutputStream(file);   
	if (bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)) {   
	out.flush();   
	out.close();   
	}   
	} catch (FileNotFoundException e) {   
	e.printStackTrace();   
	} catch (IOException e) {   
	e.printStackTrace();   
	}   
	}   
	/**  
	* 水印  
	*   
	* @param bitmap  
	* @return  
	*/  
	public static Bitmap createBitmapForWatermark(Bitmap src, Bitmap watermark) {   
	if (src == null) {   
	return null;   
	}   
	int w = src.getWidth();   
	int h = src.getHeight();   
	int ww = watermark.getWidth();   
	int wh = watermark.getHeight();   
	// create the new blank bitmap   
	Bitmap newb = Bitmap.createBitmap(w, h, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图   
	Canvas cv = new Canvas(newb);   
	// draw src into   
	cv.drawBitmap(src, 0, 0, null);// 在 0,0坐标开始画入src   
	// draw watermark into   
	cv.drawBitmap(watermark, w - ww + 5, h - wh + 5, null);// 在src的右下角画入水印   
	// save all clip   
	cv.save(Canvas.ALL_SAVE_FLAG);// 保存   
	// store   
	cv.restore();// 存储   
	return newb;   
	}   
	/**  
	* 图片合成  
	*   
	* @return  
	*/  
	public static Bitmap potoMix(int direction, Bitmap... bitmaps) {   
	if (bitmaps.length <= 0) {   
	return null;   
	}   
	if (bitmaps.length == 1) {   
	return bitmaps[0];   
	}   
	Bitmap newBitmap = bitmaps[0];   
	// newBitmap = createBitmapForFotoMix(bitmaps[0],bitmaps[1],direction);   
	for (int i = 1; i < bitmaps.length; i++) {   
	newBitmap = createBitmapForFotoMix(newBitmap, bitmaps[i], direction);   
	}   
	return newBitmap;   
	}   
	  
	private static Bitmap createBitmapForFotoMix(Bitmap first, Bitmap second, int direction) {   
	if (first == null) {   
	return null;   
	}   
	if (second == null) {   
	return first;   
	}    
	int fw = first.getWidth();   
	int fh = first.getHeight();   
	int sw = second.getWidth();   
	int sh = second.getHeight();   
	Bitmap newBitmap = null;   
	if (direction == LEFT) {   
	newBitmap = Bitmap.createBitmap(fw + sw, fh > sh ? fh : sh, Config.ARGB_8888);   
	Canvas canvas = new Canvas(newBitmap);   
	canvas.drawBitmap(first, sw, 0, null);   
	canvas.drawBitmap(second, 0, 0, null);   
	} else if (direction == RIGHT) {   
	newBitmap = Bitmap.createBitmap(fw + sw, fh > sh ? fh : sh, Config.ARGB_8888);   
	Canvas canvas = new Canvas(newBitmap);   
	canvas.drawBitmap(first, 0, 0, null);   
	canvas.drawBitmap(second, fw, 0, null);   
	} else if (direction == TOP) {   
	newBitmap = Bitmap.createBitmap(sw > fw ? sw : fw, fh + sh, Config.ARGB_8888);   
	Canvas canvas = new Canvas(newBitmap);   
	canvas.drawBitmap(first, 0, sh, null);   
	canvas.drawBitmap(second, 0, 0, null);   
	} else if (direction == BOTTOM) {   
	newBitmap = Bitmap.createBitmap(sw > fw ? sw : fw, fh + sh, Config.ARGB_8888);   
	Canvas canvas = new Canvas(newBitmap);   
	canvas.drawBitmap(first, 0, 0, null);   
	canvas.drawBitmap(second, 0, fh, null);   
	}   
	return newBitmap;   
	}   
	/**  
	* 将Bitmap转换成指定大小  
	* @param bitmap  
	* @param width  
	* @param height  
	* @return  
	*/  
	public static Bitmap createBitmapBySize(Bitmap bitmap,int width,int height)   
	{   
	return Bitmap.createScaledBitmap(bitmap, width, height, true);   
	}   
	/**  
	* Drawable 转 Bitmap  
	*   
	* @param drawable  
	* @return  
	*/  
	public static Bitmap drawableToBitmapByBD(Drawable drawable) {   
	BitmapDrawable bitmapDrawable = (BitmapDrawable)drawable;   
	return bitmapDrawable.getBitmap();   
	}   
	/**  
	* Bitmap 转 Drawable  
	*   
	* @param bitmap  
	* @return  
	*/  
	public static Drawable bitmapToDrawableByBD(Bitmap bitmap) {   
	Drawable drawable = new BitmapDrawable(bitmap);   
	return drawable;   
	}   
	/**  
	* byte[] 转 bitmap  
	*   
	* @param b  
	* @return  
	*/  
	public static Bitmap bytesToBimap(byte[] b) {   
	if (b.length != 0) {   
	return BitmapFactory.decodeByteArray(b, 0, b.length);   
	} else {   
	return null;   
	}   
	}   
	/**  
	* bitmap 转 byte[]  
	*   
	* @param bm  
	* @return  
	*/  
	public static byte[] bitmapToBytes(Bitmap bm) {   
	ByteArrayOutputStream baos = new ByteArrayOutputStream();   
	bm.compress(Bitmap.CompressFormat.PNG, 100, baos);   
	return baos.toByteArray();   
	}   

}


你可能感兴趣的:(android)