java 图片压缩处理(压缩成A4大小,72dpi,黑白)急。。。。。 请教java图片处理 把一张图片压缩成A4大小,72dpi,黑白??其中72dpi不明白什么意思?网上搜索了下说一英寸的点数?说的很抽象,大家有现成的,或者相关的例子参考吗?谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 dpi应该是类似分辨率之类的吧,个人认为不要管这个概念,就把它压缩成相应的分辨率图片就行了. dpi是针对于输出设备而言的,指输出分辨率,dots per inch,就是点/英寸,每英寸点越多自然越清楚,就你这而言是一英寸有72个点,给你个例子,自己改改吧:import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class PicCompression { private int wideth; private int height; private String t = null; public void setT(String t) { this.t = t; } public void setWideth(int wideth) { // wideth=320; this.wideth = wideth; } public int getWideth() { return this.wideth; } public void setHeight(int height) { // height=240; this.height = height; } public int getHeight(int w, int h) // former images size { // int hhh; if (w > wideth) { float ww; ww = (float) w / (float) wideth; float hh = h / ww; return (int) hh; } else { this.setWideth(w); return h; } } public void proce(String fpath) throws Exception { File _file = new File(fpath); Image src = javax.imageio.ImageIO.read(_file); int wideth = src.getWidth(null); int height = src.getHeight(null); int h = this.getHeight(wideth, height); BufferedImage tag = new BufferedImage(this.getWideth(), h, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.drawImage(src, 0, 0, this.getWideth(), h, null); if (t != null) { g.setColor(new Color(242, 242, 242)); g.fillRect(this.getWideth() - 120, h - 18, 120, 18); g.setColor(new Color(180, 180, 180)); g.drawRect(this.getWideth() - 120, h - 18, 119, 17); g.setColor(new Color(255, 102, 0)); g.drawString(t, this.getWideth() - 100, h - 5); } FileOutputStream out = new FileOutputStream(fpath); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(tag); out.close(); } /** * 压缩图片方法 * * @param oldFile * 将要压缩的图片 * @param width * 压缩宽 * @param height * 压缩长 * @param quality * 压缩清晰度 <b>建议为1.0</b> * @param smallIcon * 压缩图片后,添加的扩展名 * @return */ public String proce1(String oldFile, int width, int height, float quality, String smallIcon) { if (oldFile == null) { return null; } String newImage = null; try { File file = new File(oldFile); if(!file.exists()) //文件不存在时 return null; /** 对服务器上的临时文件进行处理 */ Image srcFile = ImageIO.read(file); // 为等比缩放计算输出的图片宽度及高度 double rate1 = ((double) srcFile.getWidth(null)) / (double) width + 0.1; double rate2 = ((double) srcFile.getHeight(null)) / (double) height + 0.1; double rate = rate1 > rate2 ? rate1 : rate2; int new_w = (int) (((double) srcFile.getWidth(null)) / rate); int new_h = (int) (((double) srcFile.getHeight(null)) / rate); /** 宽,高设定 */ BufferedImage tag = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB); tag.getGraphics().drawImage(srcFile, 0, 0, new_w, new_h, null); String filePrex = oldFile.substring(0, oldFile.indexOf('.')); /** 压缩后的文件名 */ // newImage =smallIcon + filePrex // +oldFile.substring(filePrex.length()); newImage = filePrex + smallIcon + oldFile.substring(filePrex.length()); // newImage = smallIcon; /** 压缩之后临时存放位置 */ FileOutputStream out = new FileOutputStream(newImage); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag); /** 压缩质量 */ jep.setQuality(quality, true); encoder.encode(tag, jep); out.close(); srcFile.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return newImage; } // public static void main(String str[]) { PicCompression ps = new PicCompression(); try { System.out.println(ps.proce1("D:/My Documents/My Pictures/5.jpg", 640, 480, 1, "1")); System.out.println(ps.proce1("D:/My Documents/My Pictures/5.jpg", 240, 240, 1, "2")); System.out.print("成功哦"); } catch (Exception e) { e.printStackTrace(); } }} 经过测试,发现相同大小的情况下,压缩比不及windows自带的“画图”工具,有什么地方可以改进的不?谢谢。 求帮忙弄下正则表达式 小弟初学,求编码解码该题的菜鸟问题!!! 关于JTextPane问题 急求帮助!!!!!! java中“”(双引号) 和''(单引号)的区别? 如何撤消mouselistener和mousemotionlistener??? Java1.4的帮助文档有无有中文版?? C# 转 JAVA ,很不习惯,在这吐槽一下 java线程并发 wait notify notifuAll 请大神给予解答 请问,如何做出有滚动条的JTextArea? applet用jdbc链接SQLServer 2000的问题 ftp 路由器 空文件 为什么输出的都是0呢?
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;public class PicCompression {
private int wideth;
private int height;
private String t = null; public void setT(String t) {
this.t = t;
} public void setWideth(int wideth) {
// wideth=320;
this.wideth = wideth;
} public int getWideth() {
return this.wideth;
} public void setHeight(int height) {
// height=240;
this.height = height;
} public int getHeight(int w, int h) // former images size
{
// int hhh;
if (w > wideth) {
float ww;
ww = (float) w / (float) wideth;
float hh = h / ww;
return (int) hh;
} else {
this.setWideth(w);
return h;
} } public void proce(String fpath) throws Exception {
File _file = new File(fpath);
Image src = javax.imageio.ImageIO.read(_file);
int wideth = src.getWidth(null);
int height = src.getHeight(null);
int h = this.getHeight(wideth, height);
BufferedImage tag = new BufferedImage(this.getWideth(), h,
BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(src, 0, 0, this.getWideth(), h, null);
if (t != null) {
g.setColor(new Color(242, 242, 242));
g.fillRect(this.getWideth() - 120, h - 18, 120, 18);
g.setColor(new Color(180, 180, 180));
g.drawRect(this.getWideth() - 120, h - 18, 119, 17);
g.setColor(new Color(255, 102, 0));
g.drawString(t, this.getWideth() - 100, h - 5);
}
FileOutputStream out = new FileOutputStream(fpath);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
out.close();
} /**
* 压缩图片方法
*
* @param oldFile
* 将要压缩的图片
* @param width
* 压缩宽
* @param height
* 压缩长
* @param quality
* 压缩清晰度 <b>建议为1.0</b>
* @param smallIcon
* 压缩图片后,添加的扩展名
* @return
*/
public String proce1(String oldFile, int width, int height, float quality,
String smallIcon) {
if (oldFile == null) {
return null;
}
String newImage = null;
try {
File file = new File(oldFile);
if(!file.exists()) //文件不存在时
return null;
/** 对服务器上的临时文件进行处理 */
Image srcFile = ImageIO.read(file);
// 为等比缩放计算输出的图片宽度及高度
double rate1 = ((double) srcFile.getWidth(null)) / (double) width
+ 0.1;
double rate2 = ((double) srcFile.getHeight(null)) / (double) height
+ 0.1;
double rate = rate1 > rate2 ? rate1 : rate2;
int new_w = (int) (((double) srcFile.getWidth(null)) / rate);
int new_h = (int) (((double) srcFile.getHeight(null)) / rate);
/** 宽,高设定 */
BufferedImage tag = new BufferedImage(new_w, new_h,
BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(srcFile, 0, 0, new_w, new_h, null);
String filePrex = oldFile.substring(0, oldFile.indexOf('.'));
/** 压缩后的文件名 */
// newImage =smallIcon + filePrex
// +oldFile.substring(filePrex.length());
newImage = filePrex + smallIcon
+ oldFile.substring(filePrex.length());
// newImage = smallIcon;
/** 压缩之后临时存放位置 */
FileOutputStream out = new FileOutputStream(newImage); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
/** 压缩质量 */
jep.setQuality(quality, true);
encoder.encode(tag, jep); out.close();
srcFile.flush(); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return newImage;
} //
public static void main(String str[]) {
PicCompression ps = new PicCompression();
try {
System.out.println(ps.proce1("D:/My Documents/My Pictures/5.jpg",
640, 480, 1, "1"));
System.out.println(ps.proce1("D:/My Documents/My Pictures/5.jpg",
240, 240, 1, "2"));
System.out.print("成功哦");
} catch (Exception e) {
e.printStackTrace();
}
}
}