【虎.无名】喜欢写Blog,经常上传照片,问题是照片通常都太大,相册空间又太小,通常都要做一些压缩处理。虽然windows自带的画图工具也可以完成,但是需要手工一个一个完成,我又是比较懒的人,所以,写了下面一个小工具,把图片按比例缩小x倍,或者添加一个Logo文字,关键是能批量处理,省事多了。如果需要使用,得改改main,代码很简单,我就不写详细使用手册了。
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;
import javax.imageio.ImageIO;
public class JpgTest {
public static void jpg_logo(String jpgName, String logoText) throws Exception {
File _file = new File(jpgName+".jpg"); //读入文件
Image src = ImageIO.read(_file); //构造Image对象
int w0 = src.getWidth(null); //得到源图宽
int h0 = src.getHeight(null); //得到源图长
int w2 = 800; //=w0/2
int h2 = 600; //=h0/2
int fontSize = 32;
//缩小一 半为(800,600)
BufferedImage tag = null;
tag = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0,w2, h2, null); //绘制缩小后的图
//标注水印
Graphics g = tag.getGraphics();
g.setColor(Color.RED); //以下设置前景色BLACK
// g.setXORMode(Color.RED);
g.setFont(new Font("MyFont", Font.BOLD, fontSize)); //PLAIN,BOLD,ITALIC
// g.drawString(logoText, 10, 10+fontSize);
g.drawString(logoText, w2-fontSize*(logoText.length()+3)/2, h2-10);
g.dispose();
//保存文件,输出到文件流
FileOutputStream out = new FileOutputStream(jpgName+"_800.jpg");
try {
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag); //近JPEG编码
//System.out.print(width+"*"+h0);
}finally{
out.close();
}
}
public static void jpg_logo() throws Exception {
File _file = new File("test_old.jpg"); //读入文件
Image src = ImageIO.read(_file); //构造Image对象
int w0=src.getWidth(null); //得到源图宽
int h0=src.getHeight(null); //得到源图长
//缩小一半
BufferedImage tag = null;
tag = new BufferedImage(w0/2,h0/2,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src,0,0,w0/2,h0/2,null); //绘制缩小后的图
//标注水印
Graphics g = tag.getGraphics();
//g.setColor(Color.BLACK); //以下设置前景色
g.setXORMode(Color.GREEN);
g.setFont(new Font("MyFont", Font.ITALIC, 24));
g.drawString("www.Test.com", w0/4, h0/4);
g.dispose();
//保存文件
FileOutputStream out = new FileOutputStream("test_new.jpg"); //输出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag); //近JPEG编码
//System.out.print(width+"*"+h0);
out.close();
}
public static void jpg_mini(String fn, int factor) throws Exception {
String f0 = fn+".jpg";
File f = new File(f0); //读入文件
Image src = ImageIO.read(f); //构造Image对象
int w0 = src.getWidth(null); //得到源图宽
int h0 = src.getHeight(null); //得到源图长
if (w0<800) throw new Exception("w0<800");
//-------------------------
String f2 = fn+"_.jpg";
int w2 = w0 / factor;
int h2 = h0 / factor;
BufferedImage tag = new BufferedImage(w2, h2,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, w2, h2, null); //绘制缩小后的图
System.out.println(f0+"("+w0+"*"+h0+") \t=> "+f2+"("+w2+"*"+h2+")");
//保存文件
FileOutputStream out = new FileOutputStream(f2); //输出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag); //近JPEG编码
out.close();
}
public static void jpg_rename(String fn) throws Exception {
File f0 = new File(fn+".jpg");
f0.delete();
File f2 = new File(fn+"_.jpg");
f2.renameTo(f0);
}
public static String zeroInt(int n, int len) {
String s = ""+n;
for(int i=s.length(); i<len; i++) {
s = '0'+s;
}
return s;
}
public static void jpg_mini(int factor, String fx, int idx0, int idx2, int iLen) throws Exception {
//String fx = "D:/_拓展培训20060915/DSC_";
//int idx0 = 624;
//int idx2 = 656;
String fn = null;
for(int i=idx0; i<=idx2; i++) {
fn = fx + zeroInt(i, iLen); //长度4 如:DSC_0168.JPG
try {
jpg_mini(fn, factor);
jpg_rename(fn);
}catch(Exception e){
System.out.println(fn+"..."+e);
}
}
}
public static void main(String args[]) throws Exception {
// jpg_logo();
// jpg_mini("test_old");
jpg_mini(4, "D:/_拓展培训20060915/DSC_", 1, 200, 4); //缩小4倍(0001-0200)
// jpg_logo("P1010105", "2005-4-9");
// jpg_logo("P1010086", "2005-4-9");
// jpg_logo("P1010017", "2005-4-18");
// Font f1 = Font.decode("宋体"); //System.out.println(s);
// Font f2 = Font.getFont("宋体"); //System.out.println(s);
}
}
分享到:
相关推荐
解决图片的批量处理大小,批量给图片加图片水印,加文字水印
阐述了如何在Java中,利用 HTML文档之间的链接关系,使用 Java内置的线程机制、网络通讯库和 Swing HTML解析 器实现基 于Web的图片批量下载。对Web上一些其它资源的批量下栽 。也可采用想类似的方法实现。在面向网络...
微信小程序 绘制二维码 添加中间头像Logo 公众号Cydiapp
微信小程序源码:含JAVA后端:拼车+外卖+天气,微信小程序源码:含JAVA后端:拼车+外卖+天气
java 放大缩小图片 java 放大缩小图片
java 批量上传图片
java操作Excel实现企业级批量处理代码
编写的JAVA类可以进行图片反色处理,图片的放大和缩小。
微信小程序,生成logo二维码保存图片;或者在canvas某一部位绘制二维码
图片批量添加水印(Java)
使用java语言实现批量更改照片的名字,使得这些照片的名字按照一定的规律命名。
单独放大缩小图片和移动图片的很多,很难找到能缩放和移动一起实现的例子。由于项目的需要就自己写了个java实现图片放大(以视图中心放大)、缩小、移动、鼠标拖移。
java写的图片叠加的小程序 可用于叠加水印 logo等 叠加效果很好 不会出现图片失真现象 建议将叠加后的图片保留为png格式 效果最好
一个java日程管理小程序,挺不错的,供学习交流。
共四节,全部上传不了,想要的加我http://www.cnblogs.com/hxsyl/
不错的Java小程序,适合初学者学习和交流
通过ImageIO读取文件,用BufferedImage设置图片大小,再绘制出图片,最后生成图片文件保存到相应位置
背景:由于之前程序是将图片以16进制数的形式直接保存到数据库的。现需要将图片批量导出所以写了下面的简易代码,供大家学习交流使用。 目的:将mssql数据库中类型为image的图片信息,导出到文件(*.jpg)
面向开发人员,和经常接触使用各种二维码的人,这个工具能帮助开发二维码的人员生成各种格式二维码,包括png,jpg,bpm,gif,SVG(矢量),EPS(矢量),PDF(矢量),并且能够调用电脑的摄像头扫描二维码,将码...
帮企业做网站,经常遇到有N多图片要加的,一张张浏览添加要N久,所以做了一个批量上传的功能。也拿来共享(马云说,世界是由...说明:原始图片太大或太多,可在本地服务导入,然后将数据库和图片文件夹上传上去即可。