java 等比压缩图片_java 图片等比压缩

这是一个Java类,用于将图片进行等比例缩放,支持自定义输出图片的宽度和高度。代码中创建了`DwindlePic`类,包含多个方法以适应不同的参数输入,确保在缩放过程中保持图片的比例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package util;

//缩略图实现,将图片(jpg,gif,bmp等等)真实的变成想要的大小

import java.io.*;

import java.util.*;

import com.sun.p_w_picpath.codec.jpeg.*;

import java.awt.p_w_picpath.*;

import java.awt.*;

import java.net.*;

import java.applet.*;

import java.sql.*;

//缩略图类,

//本java类能将jpg图片文件,进行等比或非等比的大小转换。

//具体使用方法

//s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))

public class DwindlePic{

String InputDir; //输入图路径

String OutputDir; //输出图路径

String InputFileName; //输入图文件名

String OutputFileName; //输出图文件名

int OutputWidth = 80; //默认输出图片宽

int OutputHeight = 80; //默认输出图片高

int rate = 0;

boolean proportion = true; //是否等比缩放标记(默认为等比缩放)

public DwindlePic() {

//初始化变量

InputDir = "";

OutputDir = "";

InputFileName = "";

OutputFileName = "";

OutputWidth = 80;

OutputHeight = 80;

rate = 0;

}

public void setInputDir(String InputDir) {

this.InputDir = InputDir;

}

public void setOutputDir(String OutputDir) {

this.OutputDir = OutputDir;

}

public void setInputFileName(String InputFileName) {

this.InputFileName = InputFileName;

}

public void setOutputFileName(String OutputFileName) {

this.OutputFileName = OutputFileName;

}

public void setOutputWidth(int OutputWidth) {

this.OutputWidth = OutputWidth;

}

public void setOutputHeight(int OutputHeight) {

this.OutputHeight = OutputHeight;

}

public void setW_H(int width, int height) {

this.OutputWidth = width;

this.OutputHeight = height;

}

public String s_pic() {

BufferedImage p_w_picpath;

String NewFileName;

//建立输出文件对象

File file = new File(OutputDir + OutputFileName);

FileOutputStream tempout = null;

try {

tempout = new FileOutputStream(file);

}

catch (Exception ex) {

System.out.println(ex.toString());

}

Image img = null;

Toolkit tk = Toolkit.getDefaultToolkit();

Applet app = new Applet();

MediaTracker mt = new MediaTracker(app);

try {

img = tk.getImage(InputDir + InputFileName);

mt.addImage(img, 0);

mt.waitForID(0);

}

catch (Exception e) {

e.printStackTrace();

}

if (img.getWidth(null) == -1) {

System.out.println(" can't read,retry!" + "
");

return "no";

}

else {

int new_w;

int new_h;

if (this.proportion == true) { //判断是否是等比缩放.

//为等比缩放计算输出的图片宽度及高度

double rate1 = ( (double) img.getWidth(null)) / (double) OutputWidth +

0.1;

double rate2 = ( (double) img.getHeight(null)) / (double) OutputHeight +

0.1;

double rate = rate1 > rate2 ? rate1 : rate2;

new_w = (int) ( ( (double) img.getWidth(null)) / rate);

new_h = (int) ( ( (double) img.getHeight(null)) / rate);

}

else {

new_w = OutputWidth; //输出的图片宽度

new_h = OutputHeight; //输出的图片高度

}

BufferedImage buffImg = new BufferedImage(new_w, new_h,BufferedImage.TYPE_INT_RGB);

Graphics g = buffImg.createGraphics();

g.setColor(Color.white);

g.fillRect(0, 0, new_w, new_h);

g.drawImage(img, 0, 0, new_w, new_h, null);

g.dispose();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);

try {

encoder.encode(buffImg);

tempout.close();

}

catch (IOException ex) {

System.out.println(ex.toString());

}

}

return "ok";

}

public String s_pic(String InputDir, String OutputDir, String InputFileName,

String OutputFileName) {

//输入图路径

this.InputDir = InputDir;

//输出图路径

this.OutputDir = OutputDir;

//输入图文件名

this.InputFileName = InputFileName;

//输出图文件名

this.OutputFileName = OutputFileName;

return s_pic();

}

public String s_pic(String InputDir, String OutputDir, String InputFileName,

String OutputFileName, int

width, int height, boolean gp) {

//输入图路径

this.InputDir = InputDir;

//输出图路径

this.OutputDir = OutputDir;

//输入图文件名

this.InputFileName = InputFileName;

//输出图文件名

this.OutputFileName = OutputFileName;

//设置图片长宽

setW_H(width, height);

//是否是等比缩放 标记

this.proportion = gp;

return s_pic();

}

// 测试类

public static void main(String[] a)

{

//s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度)

DwindlePic mypic = new DwindlePic();

System.out.println(

mypic.s_pic("e:\\workspace\\baby\\web\\uploadFile\\products\\2007\\11\\02\\",

"e:\\workspace\\baby\\web\\uploadFile\\products\\2007\\11\\02\\",

"20071102194928960.jpg", "new.jpg", 120, 80, true)

);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值