Android学習の圧縮画像から指定サイズへ


画像圧縮については、サーバーをアップロードする際にサイズ制限があるところがあるので、ここでは2つの方法をまとめましたが、個人的な感覚方法はどちらかというと正確です.
方法1:

	 *        
	 * 
	 *    bitmap  ,    64kb,     
	 * 
	 * @param bitmap
	 * @return
	 */
	private Bitmap ImageCompressL(Bitmap bitmap) {
		double targetwidth = Math.sqrt(64.00 * 1000);
		if (bitmap.getWidth() > targetwidth || bitmap.getHeight() > targetwidth) {
			//         matrix  
			Matrix matrix = new Matrix();
			//        
			double x = Math.max(targetwidth / bitmap.getWidth(), targetwidth
					/ bitmap.getHeight());
			//       
			matrix.postScale((float) x, (float) x);
			bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
					bitmap.getHeight(), matrix, true);
		}
		return bitmap;
	}

方法2:

	 *        (    )
	 * 
	 *    bitmap  ,    64kb,     
	 * 
	 * @param bitmap
	 */
	private Bitmap ImageCompress(Bitmap bitmap) {
		//            :KB
		double maxSize = 64.00;
		//  bitmap     ,  bitmap   (           )
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
		byte[] b = baos.toByteArray();
		//      KB
		double mid = b.length / 1024;
		//   bitmap                             
		if (mid > maxSize) {
			//   bitmap              
			double i = mid / maxSize;
			//                              
			bitmap = zoomImage(bitmap, bitmap.getWidth() / Math.sqrt(i),
					bitmap.getHeight() / Math.sqrt(i));
		}
		return bitmap;
	}

	/***
	 *        
	 * 
	 * @param bgimage
	 *            :     
	 * @param newWidth
	 *            :     
	 * @param newHeight
	 *            :     
	 * @return
	 */
	public Bitmap zoomImage(Bitmap bgimage, double newWidth, double newHeight) {
		//           
		float width = bgimage.getWidth();
		float height = bgimage.getHeight();
		//         matrix  
		Matrix matrix = new Matrix();
		//        
		float scaleWidth = ((float) newWidth) / width;
		float scaleHeight = ((float) newHeight) / height;
		//       
		matrix.postScale(scaleWidth, scaleHeight);
		Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,
				(int) height, matrix, true);
		return bitmap;
	}