2016-10-08 2 views
1

Предположим, у меня есть изображение размера 20mb, мне нужно масштабировать его до максимального размера цели 15Mb. Как мне это достичь?ImageResize для android sample

Я не нашёл ни одного api кроме createScaledBitmap, который просто занимает изображение, его высоту и ширину, но не имеет целевого размера.

Как я могу это достичь? Должен ли я слепо продолжать пытаться с разной шириной и высотой, пока он не уменьшится до < = размер цели?

Пожалуйста, помогите.

ответ

0

Graphics2D обеспечивает функцию изображения повторно размера следующим образом:

BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type); 
Graphics2D g = resizedImage.createGraphics(); 
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null); 
g.dispose(); 

Согласно некоторым статьям, если вы хотите, чтобы увеличить повторное размера качество изображения, вы можете добавить RenderingHints в следующим образом:

BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type); 
Graphics2D g = resizedImage.createGraphics(); 
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null); 
g.dispose(); 
g.setComposite(AlphaComposite.Src); 
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY); 
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 

Полный пример доступен http://www.mkyong.com/java/how-to-resize-an-image-in-java/

+0

Должен ли я всегда упоминать статическое значение ** IMG_WIDTH, IMG_HEIGHT ** ??? выполнить это? –

+0

да. вы должны –

0

Вы проверили этот link

Насколько я знаю, масштабировать размер изображения или размер файла с Bitmap

+0

Я проверил эту ссылку, но, как и мой комментарий в предыдущем совете, эта ссылка предполагает наличие значения ** DESIRED_WIDTH, DESIRED_HEIGHT **. Но в моем случае у меня есть целевой размер, но нет особых ограничений по ширине и высоте. –

0

Используйте этот код для изменения размера изображения

// Draw Bitmap on Canvas 
public void setBitmap(String imageUrl){ 

    Bitmap myBitmap = BitmapFactory.decodeFile(imageUrl); 

    Bitmap scaleBitmap = null; 
    int bWidth = myBitmap.getWidth(); 
    int bHeight = myBitmap.getHeight(); 
    int diff = 0; 

    Log.d(TAG, "bitmapWidth = " + bitmapWidth + " bitmapHeight = " + bitmapHeight); 

    Log.d(TAG, "bWidth = " + bWidth + " bHeight = " + bHeight); 

    if(bWidth >= bHeight){ 

     if(bWidth > bitmapWidth){ 

      // landscape 
      float ratio = (float) bWidth/bitmapWidth; 
      diff = bWidth - bitmapWidth; 
      bHeight = (int)(bHeight/ratio); 
      scaleBitmap = Bitmap.createScaledBitmap(myBitmap, bWidth - diff, bHeight, false); 
     } 
     else{ 

      scaleBitmap = myBitmap; 
     } 
    } 
    else{ 

     if(bHeight > bitmapHeight){ 

      float ratio = (float) bHeight/bitmapHeight; 
      diff = bHeight - bitmapHeight; 
      bWidth = (int)(bWidth/ratio); 
      scaleBitmap = Bitmap.createScaledBitmap(myBitmap, bWidth, bHeight - diff, false); 
     } 
     else{ 

      scaleBitmap = myBitmap; 
     } 
    } 



    canvasBitmap = scaleBitmap; 
    invalidate(); 

} 

ли поднимать стрелу так, чтобы другие также может получить ссылку для изменения размера изображения.

+0

где начальные значения для ** bitmapWidth и bitmapHeight ** установлены? –