高分求救生成高质量缩略图! 大家帮帮忙,我做的生成图片的缩略图质量挺差的。呵呵! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你好像是在求算法吧。我用swt的2Ddraw生成过效果还可以。 import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.awt.image.ColorModel;import java.awt.image.WritableRaster;import java.awt.*;import java.awt.geom.AffineTransform;import java.io.InputStream;import java.io.File;import java.io.FileOutputStream;public class test { public static BufferedImage resize(BufferedImage source, int targetW, int targetH) { // targetW,targetH分别表示目标长和宽 int type = source.getType(); BufferedImage target = null; double sx = (double) targetW / source.getWidth(); double sy = (double) targetH / source.getHeight(); //这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放 //则将下面的if else语句注释即可 if(sx>sy) { sx = sy; targetW = (int)(sx * source.getWidth()); }else{ sy = sx; targetH = (int)(sy * source.getHeight()); } if (type == BufferedImage.TYPE_CUSTOM) { //handmade ColorModel cm = source.getColorModel(); WritableRaster raster = cm.createCompatibleWritableRaster(targetW, targetH); boolean alphaPremultiplied = cm.isAlphaPremultiplied(); target = new BufferedImage(cm, raster, alphaPremultiplied, null); } else target = new BufferedImage(targetW, targetH, type); Graphics2D g = target.createGraphics(); //smoother than exlax: g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY ); g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy)); g.dispose(); return target; } public static void saveImageAsJpg (String fromFileStr,String saveToFileStr,int width,int hight) throws Exception { BufferedImage srcImage; File saveFile=new File(saveToFileStr); File fromFile=new File(fromFileStr); srcImage = ImageIO.read(fromFile); if(width > 0 || hight > 0) { srcImage = resize(srcImage, width, hight); } ImageIO.write(srcImage, "JPEG", saveFile); } public static void main (String argv[]) { System.err.println("xxxxxx"); try{ //参数1(from),参数2(to),参数3(宽),参数4(高) test.saveImageAsJpg("c:/2.jpg","c:/3.jpg",400,400); } catch(Exception e) { e.printStackTrace(); } }}//我现在写的!看看有没有更好的! BufferedImage.getScaledInstance() 效果不好吗? 能否在说的细一些!或者给各demo!先谢了!!!!! char数组和String数组可不可以定义成UTF-8编码 程序打包成jar后读取文件的问题 请问那里有好的java界面控件 诚聘JAVA/JSP开发人员和游戏策划人员 这些都是什么错误呀 为什么要最大化后才能看见? URL问题求救 新手:高分请问jbuilder7 怎么导入包。。。 请推荐一个Java Decompiler 100分再问一个基本问题:安装好JDK后如何在autoexec.bat文件中配置?安装好jswdk后怎么配置呢?在我的机器上的浏览器无法浏览jswdk下的js 关于JComboBox的问题 一个JFrame里如何放入另一个Jframe阿???国际........
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.io.InputStream;
import java.io.File;
import java.io.FileOutputStream;public class test {
public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
// targetW,targetH分别表示目标长和宽
int type = source.getType();
BufferedImage target = null;
double sx = (double) targetW / source.getWidth();
double sy = (double) targetH / source.getHeight();
//这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放
//则将下面的if else语句注释即可
if(sx>sy)
{
sx = sy;
targetW = (int)(sx * source.getWidth());
}else{
sy = sx;
targetH = (int)(sy * source.getHeight());
}
if (type == BufferedImage.TYPE_CUSTOM) { //handmade
ColorModel cm = source.getColorModel();
WritableRaster raster = cm.createCompatibleWritableRaster(targetW, targetH);
boolean alphaPremultiplied = cm.isAlphaPremultiplied();
target = new BufferedImage(cm, raster, alphaPremultiplied, null);
} else
target = new BufferedImage(targetW, targetH, type);
Graphics2D g = target.createGraphics();
//smoother than exlax:
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
g.dispose();
return target;
}
public static void saveImageAsJpg (String fromFileStr,String saveToFileStr,int width,int hight)
throws Exception {
BufferedImage srcImage;
File saveFile=new File(saveToFileStr);
File fromFile=new File(fromFileStr);
srcImage = ImageIO.read(fromFile);
if(width > 0 || hight > 0)
{
srcImage = resize(srcImage, width, hight);
}
ImageIO.write(srcImage, "JPEG", saveFile); }
public static void main (String argv[]) {
System.err.println("xxxxxx");
try{
//参数1(from),参数2(to),参数3(宽),参数4(高)
test.saveImageAsJpg("c:/2.jpg","c:/3.jpg",400,400);
} catch(Exception e)
{
e.printStackTrace();
} }
}
//我现在写的!看看有没有更好的!
BufferedImage.getScaledInstance() 效果不好吗?