图形缩小,求救 -- 会者不难,可俺不会 ( 积分: 100 )

  • 主题发起人 huangxw2003
  • 开始时间
H

huangxw2003

Unregistered / Unconfirmed
GUEST, unregistred user!
要求:将JPEG文件缩小
出现问题:缩小后的JPEG文件失真严重,如何不失真
附件文件说明:1.jpg 文件 -- 缩小后为 11.jpg 文件 失真严重;如果用WINDOWS XP的画图来缩小,效果就好多了
2.jpg 文件 -- 缩小后为 21.jpg 文件 不感觉失真
我不会发附件,要者请留下Email
源代码: JBuilder9工程文件
ImageUtil.Java 文件
public String ScaleJpeg(String Source, int MaxX, int MaxY)
throws IOException {
// 转换指定的图形文件到JPEG文件,图象的最大尺寸为MaxX,MaxY,返回值为转换后的文件名
// 返回值为空表示转换失败
String retInfoString = null;
String Dest = Source.substring(0, Source.lastIndexOf(".")) + "1.jpg";
if ( Source != null ) {
try {
File file = new File(Source);
// 读入文件
BufferedImage src = javax.imageio.ImageIO.read(file);
// 构造 BufferedImage 对象
waitForImage(src);
double width = (double) src.getWidth(null);
// 得到源图宽
double height = (double) src.getHeight(null);
// 得到源图长
retInfoString = Source;
if ( ( (int) width > MaxX ) || ( (int) height > MaxY ) ) {
double x_ins = (double) MaxX / width;
// x 方向的比例
double y_ins = (double) MaxY / height;
// y 方向的比例
if ( x_ins > y_ins ) { // 将 x,y 方向的比例调整到一致
x_ins = y_ins;
}
int iWidth = (int) ( width * x_ins );
// 转换后 x 方向实际大小
int iHeight = (int) ( height * x_ins );
// 转换后 y 方向实际大小
Image Itemp = src.getScaledInstance(iWidth,iHeight,BufferedImage.SCALE_SMOOTH);
waitForImage(Itemp);
AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(x_ins, x_ins), null);
Itemp = op.filter(src, null);
File dest = new File(Dest);
ImageIO.write((BufferedImage)Itemp, "jpg", dest);
retInfoString = Dest;
}
} catch (Exception je) {
System.err.println("Error: " + je);
}
}
return retInfoString;
}
 
H

huangxw2003

Unregistered / Unconfirmed
GUEST, unregistred user!
要求:将JPEG文件缩小
出现问题:缩小后的JPEG文件失真严重,如何不失真
附件文件说明:1.jpg 文件 -- 缩小后为 11.jpg 文件 失真严重;如果用WINDOWS XP的画图来缩小,效果就好多了
2.jpg 文件 -- 缩小后为 21.jpg 文件 不感觉失真
我不会发附件,要者请留下Email
源代码: JBuilder9工程文件
ImageUtil.Java 文件
public String ScaleJpeg(String Source, int MaxX, int MaxY)
throws IOException {
// 转换指定的图形文件到JPEG文件,图象的最大尺寸为MaxX,MaxY,返回值为转换后的文件名
// 返回值为空表示转换失败
String retInfoString = null;
String Dest = Source.substring(0, Source.lastIndexOf(".")) + "1.jpg";
if ( Source != null ) {
try {
File file = new File(Source);
// 读入文件
BufferedImage src = javax.imageio.ImageIO.read(file);
// 构造 BufferedImage 对象
waitForImage(src);
double width = (double) src.getWidth(null);
// 得到源图宽
double height = (double) src.getHeight(null);
// 得到源图长
retInfoString = Source;
if ( ( (int) width > MaxX ) || ( (int) height > MaxY ) ) {
double x_ins = (double) MaxX / width;
// x 方向的比例
double y_ins = (double) MaxY / height;
// y 方向的比例
if ( x_ins > y_ins ) { // 将 x,y 方向的比例调整到一致
x_ins = y_ins;
}
int iWidth = (int) ( width * x_ins );
// 转换后 x 方向实际大小
int iHeight = (int) ( height * x_ins );
// 转换后 y 方向实际大小
Image Itemp = src.getScaledInstance(iWidth,iHeight,BufferedImage.SCALE_SMOOTH);
waitForImage(Itemp);
AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(x_ins, x_ins), null);
Itemp = op.filter(src, null);
File dest = new File(Dest);
ImageIO.write((BufferedImage)Itemp, "jpg", dest);
retInfoString = Dest;
}
} catch (Exception je) {
System.err.println("Error: " + je);
}
}
return retInfoString;
}
 
J

jangill

Unregistered / Unconfirmed
GUEST, unregistred user!
学习学习。
 
顶部