Chcę zmniejszyć rozmiar pliku obrazu przesłanego obrazu przed zapisaniem go na serwerze (aby skrócić czas ładowania). jak mogę to zrobić za pomocą Java?Jak zmniejszyć rozmiar pliku obrazu w java
Odpowiedz
Tego rodzaju pytanie zostało udzielone kilka razy na tej stronie. Sugeruję wypróbowanie How to resize the original image into a common size of image in Java? lub wyszukaj rozmiar obrazu java na tej stronie.
właściwie mówiłem o rozmiarze pliku (3mb -> 200 kb), a nie o wymiarach obrazu. Czy to także je obejmuje? – Anand
Tak, jest to ten sam rodzaj - rozmiar pliku jest określany głównie przez wymiary obrazu (i potencjalnie kompresję obrazu, w zależności od używanego formatu) –
/*
* This will get an image file and returns a byte array resized by the given value.
*/
package tajneed;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import javax.imageio.ImageIO;
import org.imgscalr.Scalr;
public class ImageResizer {
public static byte[] resize(File icon) {
try {
BufferedImage originalImage = ImageIO.read(icon);
originalImage= Scalr.resize(originalImage, Scalr.Method.QUALITY, Scalr.Mode.FIT_EXACT, 128, 153);
//To save with original ratio uncomment next line and comment the above.
//originalImage= Scalr.resize(originalImage, 153, 128);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(originalImage, "jpg", baos);
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();
return imageInByte;
} catch (Exception e) {
return null;
}
}
}
Poniższy kod pomoże ci zmienić rozmiar i zachować jakość obrazu.
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
} else {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
System.out.println("Unable to load image" + e.getMessage());}
Iterator itr = items.iterator();
while(itr.hasNext()) {
System.out.println(items.size());
FileItem item = (FileItem) itr.next();
if (!item.isFormField()) {
try {
int size = 200;// size of the new image.
//take the file as inputstream.
InputStream imageStream = item.getInputStream();
//read the image as a BufferedImage.
BufferedImage image = javax.imageio.ImageIO.read(imageStream);
//cal the sacleImage method.
BufferedImage newImage = scaleImage(image, size);
String path = getServletContext().getRealPath("/image");
//write file.
File file = new File(path, "testimage.jpg");
ImageIO.write(newImage, "JPG", file);
} catch (Exception e) {
System.out.println("Unable to save the image" + e.getMessage());
//System.out.println(path);
}//if
}//iter
}
private BufferedImage scaleImage(BufferedImage bufferedImage, int size) {
double boundSize = size;
int origWidth = bufferedImage.getWidth();
int origHeight = bufferedImage.getHeight();
double scale;
if (origHeight > origWidth)
scale = boundSize/origHeight;
else
scale = boundSize/origWidth;
//* Don't scale up small images.
if (scale > 1.0)
return (bufferedImage);
int scaledWidth = (int) (scale * origWidth);
int scaledHeight = (int) (scale * origHeight);
Image scaledImage = bufferedImage.getScaledInstance(scaledWidth, scaledHeight, Image.SCALE_SMOOTH);
// new ImageIcon(image); // load image
// scaledWidth = scaledImage.getWidth(null);
// scaledHeight = scaledImage.getHeight(null);
BufferedImage scaledBI = new BufferedImage(scaledWidth, scaledHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = scaledBI.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(scaledImage, 0, 0, null);
g.dispose();
return (scaledBI);
}
- 1. (raporty kryształów) Jak zmniejszyć rozmiar pliku RPT
- 2. Jak zmniejszyć rozmiar obrazu na przycisku?
- 3. Jak zmniejszyć rozmiar pliku audio w IOS
- 4. Jak zmniejszyć rozmiar pliku dziennika serwera sql?
- 5. jak zmniejszyć duży rozmiar obrazu do rozmiaru miniatur w Androidzie
- 6. Jak zmniejszyć rozmiar JPEG w Androidzie
- 7. Jak zmniejszyć rozmiar pliku RTF z osadzonymi obrazami?
- 8. Jak zmienić rozmiar obrazu w Java?
- 9. Jak zmniejszyć rozmiar obrazu Docker za pomocą NodeJs
- 10. C# dlaczego rozmiar obrazu zwiększy rozmiar pliku
- 11. Jak zmniejszyć rozmiar std :: wektor?
- 12. Spinner: Jak zmniejszyć rozmiar spinnera
- 13. Jak zmniejszyć rozmiar czcionki w NumberPicker
- 14. Jakie są ogólne wskazówki, jak zmniejszyć rozmiar pliku wykonywalnego Pyinstaller
- 15. Jak zmniejszyć rozmiar pliku wykonywalnego Clozure Common Lisp?
- 16. jak zmniejszyć rozmiar exe przy użyciu py2exe
- 17. WebPack łączenia wielu wersji jQuery aby zmniejszyć rozmiar pliku
- 18. Jak zmniejszyć rozmiar podpisów na wszystkich rysunkach?
- 19. Jak zmniejszyć rozmiar repo na Github
- 20. Jak zmniejszyć rozmiar wykresu kołowego KendoUI?
- 21. Jak skompresować rozmiar obrazu?
- 22. Jak zmienić rozmiar buforowanego obrazu n grafiki 2d w java?
- 23. Jak mogę zmniejszyć rozmiar repozytorium Subversion?
- 24. rozmiar obrazu tła iphone
- 25. Jak zmienić rozmiar (zmniejszyć) pola elektromagnetycznego (Metafile) w .Net?
- 26. Jak zmniejszyć rozmiar plików MP3 w systemie Linux?
- 27. Java zmniejszyć zużycie procesora
- 28. Jak zmniejszyć rozmiar MP4 za pomocą biblioteki FFMPEG do Androida
- 29. Jak zoptymalizować rozmiar pliku PDF?
- 30. Utwórz miniaturę i zmniejsz rozmiar obrazu
Można zapisać obraz w skompresowanym formacie, takim jak JPEG lub PNG. – christian