我想要的大小的縮略圖,使居住 - 任何類型的圖像的縮略圖。 (拇指在.jpg雖然) - 其中最中間幀的視頻縮略圖。創建的圖像和視頻
我已經看到了一些其他問題計算器和google搜索,但不能做任何一個工作良好。
例如
使用此代碼,但它不會創建一個好質量的縮略圖。
package main;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class Main implements Serializable {
public static void main(String[] args) throws FileNotFoundException, IOException {
Main fac = new Main();
fac.run("C:\\Users\\Masood-Ahmad\\Desktop\\tempSnaps");
}
public void run(String folder) {
File dir = new File(folder);
for (File file : dir.listFiles()) {
createThumbnail(file);
}
}
private void createThumbnail(File file) {
try {
// BufferedImage is the best (Toolkit images are less flexible)
BufferedImage img = ImageIO.read(file);
BufferedImage thumb = createEmptyThumbnail();
// BufferedImage has a Graphics2D
Graphics2D g2d = (Graphics2D) thumb.getGraphics();
//**Edit-------------**
g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE);
//**Edit end----------------**
g2d.drawImage(img, 0, 0,
thumb.getWidth() - 1,
thumb.getHeight() - 1,
0, 0,
img.getWidth() - 1,
img.getHeight() - 1,
null);
g2d.dispose();
ImageIO.write(thumb, "JPG", createOutputFile(file));
} catch (Exception e) {
e.printStackTrace();
}
}
private File createOutputFile(File inputFile) {
// You'll want something better than this...
return new File(inputFile.getAbsolutePath()
+ ".thumb.png");
}
private BufferedImage createEmptyThumbnail() {
return new BufferedImage(200, 200,
BufferedImage.TYPE_INT_RGB);
}
看到編輯。沒用 –
我說插值!使用'RenderingHints.KEY_INTERPOLATION'並將其設置爲'VALUE_INTERPOLATION_BICUBIC',你已經得到了所有其他可能的提示設置,但不是實際的一個需要。 –
我認爲你對'drawImage()'的調用應該使用拇指和圖像寬度和高度,而不是寬度-1和高度-1。幾何邊界通常是較低的包容性的,高級獨佔的,以便它們的差異與它們測量的像素的數目相同。 –