我想知道是否可以在不使用任何第三方庫的情況下爲Java中的圖像生成具有適當高寬比的縮略圖。如果沒有,那麼請提供一個快速高效的開源庫來生成具有適當高寬比的縮略圖。在Java中生成縮略圖
如果圖像非常大可以說1900 X 1080
,那麼縮略圖不應該是原始圖像的縮放版本裁剪和調整大小,從而獲得清晰的視圖。
注意:縮略圖的大小對於任何尺寸的圖像都是恆定的。
我想知道是否可以在不使用任何第三方庫的情況下爲Java中的圖像生成具有適當高寬比的縮略圖。如果沒有,那麼請提供一個快速高效的開源庫來生成具有適當高寬比的縮略圖。在Java中生成縮略圖
如果圖像非常大可以說1900 X 1080
,那麼縮略圖不應該是原始圖像的縮放版本裁剪和調整大小,從而獲得清晰的視圖。
注意:縮略圖的大小對於任何尺寸的圖像都是恆定的。
我喜歡im4java,Image Magick的包裝。
im4java只是爲ImageMagick命令生成命令行並將生成的行傳遞給選定的IM命令(使用java.lang.ProcessBuilder.start()方法),這意味着細化和內存消耗是委託給服務器內的另一個preocess,我喜歡這個。
我正在使用和我在很多項目中使用它,我發現它非常可靠,快速和完整。需要
沒有第三方庫(但可能慢於ImageMagick的):
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import java.nio.file.*;
public class J {
public static BufferedImage createThumb(BufferedImage in, int w, int h) {
// scale w, h to keep aspect constant
double outputAspect = 1.0*w/h;
double inputAspect = 1.0*in.getWidth()/in.getHeight();
if (outputAspect < inputAspect) {
// width is limiting factor; adjust height to keep aspect
h = (int)(w/inputAspect);
} else {
// height is limiting factor; adjust width to keep aspect
w = (int)(h*inputAspect);
}
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.setRenderingHint(
RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2.drawImage(in, 0, 0, w, h, null);
g2.dispose();
return bi;
}
public static void main(String args[]) throws Exception {
for (String in : args) {
BufferedImage bi = createThumb(
ImageIO.read(Files.newInputStream(Paths.get(in))),
128, 128);
String ext = in.substring(in.lastIndexOf(".")+1);
String out = in.replaceFirst(".([a-z]+)$", "_thumb." + ext);
System.err.println(in + " --> " + out);
ImageIO.write(bi, ext, Files.newOutputStream(Paths.get(out)));
}
}
}
主要方法預計,作爲參數,路徑將圖像陣列。它將嘗試以與找到原件相同的格式創建縮略圖;您可以通過替換分配ext
和ext = "png"
(例如)的行來更改此設置。
上述內容會生成固定寬度的縮略圖,但高度會變化以保持寬高比。但要求是生成圖像或圖像區域的縮略圖並保持寬高比。 –
錯了。圖像將被製作爲適合'w'x'h',適當降低其高度*或*寬度以保持縱橫比。這是「恆定大小」的三種可能解釋之一(參見我對OP的評論)。 – tucuxi
「適當修剪」 的標準是什麼? – Puce
你想存儲縮略圖,顯示它們還是兩者?如果你想顯示它們:你是否已經有UI工具箱? – Puce
「恆定大小」是什麼意思?相同的磁盤大小?相同的總像素數?與給定數量相同的寬度或高度(以較大者爲準)? – tucuxi