【虎.无名】喜欢写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);
}
}
分享到:
相关推荐
在微信小程序中添加中间带有头像Logo的二维码是一项常见的需求,尤其在个性化和品牌推广方面。这个主题涉及到几个关键知识点,包括微信小程序的开发环境、SVG图像处理、Canvas API的运用以及图片资源的加载和合成。 ...
在Java编程中,实现图片上传并添加水印效果是一项常见的任务,这通常涉及到图像处理、图形用户界面(GUI)和文件I/O等多个方面。在这个项目中,我们将关注以下几个关键知识点: 1. **Java图像处理库**:Java标准库...
解决图片的批量处理大小,批量给图片加图片水印,加文字水印
6. Java GUI 背景图片添加:可以使用 JLabel 和 ImageIcon 对象将背景图片添加到 GUI 界面中。 7. Java 图形用户界面布局管理:Java 提供了多种布局管理器,例如 FlowLayout、BorderLayout 等,用于管理 GUI 界面的...
- **批量处理**:程序可以遍历源目录下的所有图片文件,并根据用户设定的尺寸进行缩放和保存至目标目录。 - **异常处理**:需要添加适当的异常处理逻辑,如文件不存在、IO异常等,确保程序的健壮性和稳定性。 ###...
在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang.OutOfMemoryError: Java heap space”是一种常见的异常情况,它表明Java虚拟机(JVM)...
在标签中,作者列出了四个关键词:“java 处理图片背景颜色”、“java 图片背景颜色替换”、“java 图片背景颜色更改”、“java 蓝底寸照批量转换为白底”,这些关键词都与 Java 处理图片背景颜色相关。 在部分内容...
根据提供的文件信息,本文将详细解释如何使用Java进行图片放大与缩小的相关知识点,包括关键类库的导入、图片格式的支持情况、验证图片格式的方法以及图片缩放的具体实现。 ### 一、关键类库的导入 在Java中处理...
在Java编程语言中,处理图像是一项常见的任务,特别是在开发图形用户界面(GUI)应用程序时。本文将详细讨论如何实现图片的中心放大、缩小、移动以及鼠标拖移功能。首先,我们需要理解Java中的Swing或JavaFX库,这两...
1. **图片处理库**:首先,我们需要一个强大的Java图片处理库,如`ImageMagick`或`Apache Commons Imaging (Sanselan)`。在这个案例中,我们可能使用了`Java Advanced Imaging (JAI)`或者第三方库如`ImageIO`,因为...
Java源代码:日程管理小程序是一个实用的编程项目,它为用户提供了一个管理日常任务和活动的平台。这个程序是用Java编程语言编写的,对于学习Java编程和理解面向对象设计原则的人来说,这是一个很好的实例。在Java中...
本项目标题为“JAVA批量下载图片”,这显然涉及到使用Java进行网络爬虫技术来实现图片的批量抓取与下载。下面我们将深入探讨这个话题。 首先,我们需要了解Java中的网络请求库,如HttpURLConnection、Apache ...
"一些比较有意思的Java小程序"这个标题暗示了我们将会探讨一系列趣味性强、易于理解的Java代码示例,这些示例通常适合Java初学者用来学习和实践编程概念。 在描述中提到的“不错的Java小程序”可能包括各种实用的小...
java图片处理工具类JAR包 java-image-scalingjar
在“微信小程序+Java后台完整代码”中,我们可以看到一个完整的电商解决方案,包括前端的小程序部分和后端的Java服务。小程序商城的部分主要负责展示商品、处理用户交互、实现购物车功能、订单管理以及支付流程等。...
3. **批量添加SQL语句**:使用循环将每条记录封装成一条SQL语句,并通过`addBatch()`方法添加到批处理中。 ```java for (int n = 0; n ; n++) { ps.setLong(1, id[n]); ps.setString(2, name[n]); ps.setInt(3...
在Java开发中,生成带有中间logo的二维码是一项实用的技术,可以增强二维码的视觉效果和品牌识别度。这里我们将深入探讨两种实现方式:Zxing(Zebra Crossing)和QRCode。 首先,Zxing是一个开源的二维码和条形码...
在Java编程环境中,生成带有图片(logo)的二维码是一项实用的技术,这通常涉及到图像处理和二维码编码库的结合使用。以下是一种实现这个功能的方法,基于`com.google.zxing`库,一个广泛使用的二维码生成库。 首先...
这个“经典的java小程序源代码合集”包含了164个精心设计的程序示例,涵盖了各种类型的小游戏和实用工具,如五子棋、俄罗斯方块、扫雷以及聊天程序。这些程序是学习Java编程语言及其应用的宝贵资源,不仅能让初学者...
### Java打印PDF文件及批量打印实现 #### 一、引言 在企业级应用开发中,经常需要处理各种文档操作,其中包括PDF文件的打印。Java作为一种广泛应用的企业级开发语言,提供了多种方式来实现这一功能。本文将详细...