/*
* 此代码是实现Java的批量改变图片的大小
*/
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
import java.awt.GridLayout;
public class PicPro extends WindowAdapter implements ActionListener{
JFrame frame;
JPanel panel1,panel3,panel4,panel5;
JTextField tf1,tf2,tf3,tf4;
JTextArea ta;
JLabel label1,label2,label3,label4;
JButton button,button1,button2;
Font font1=new Font("宋体",Font.PLAIN,20);
Font font2=new Font("宋体",Font.PLAIN,16);
File filein;
File fileout;
File[]filelist;
File wzw=new File("wzw");
int width;
int height;
boolean flag_in;
boolean flag_out;
boolean flag_num;
PicPro(){
frame=new JFrame("批量图片处理");
frame.setSize(500,600);
frame.setLocation(300,100);
frame.setResizable(false);
panel1=new JPanel();
panel3=new JPanel();
panel4=new JPanel();
panel5=new JPanel();
tf1=new JTextField(30);
tf2=new JTextField(30);
tf3=new JTextField(7);
tf4=new JTextField(7);
tf1.setFont(font1);
tf2.setFont(font1);
tf3.setFont(font1);
tf4.setFont(font1);
label1=new JLabel("源文件夹");
label2=new JLabel("目标文件夹");
label3=new JLabel("转换后X:");
label4=new JLabel("转换后Y:");
label1.setFont(font2);
label2.setFont(font2);
label3.setFont(font2);
label4.setFont(font2);
ta=new JTextArea();
ta.setFont(font2);
ta.setEditable(false);
ta.setLineWrap(true);
JScrollPane scroller=new JScrollPane(ta);
scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
frame.add(scroller,BorderLayout.CENTER);
ta.setText("请注意各项的填写格式,区分大小写:\n"+
"源文件夹填写要转换图片集所在文件夹,例如'D:\\picture\\';\n"+
"目标文件夹填写转换后保存的文件夹,例如'C:\\picture\\';\n"+
"转换后X:填写希望转换后图片的宽度(整数);\n"+
"转换后Y:填写希望转换后图片的高度(整数);\n"+
"当源文件夹中有非图片格式文件或文件夹时,程序会自动选择出图片文件\n"+
"Change之前请先Check,当目标文件夹中重名情况时,程序会给出是否覆盖提示.\n"+
"\t\t\t程序问题发送到wzwahl36@qq.com\n");
button=new JButton("Change");
button1=new JButton("Check");
button2=new JButton("Check");
button.setFont(font2);
button1.setFont(font2);
button2.setFont(font2);
panel1.setLayout(new GridLayout(3,1));
panel1.add(panel3);
panel1.add(panel4);
panel1.add(panel5);
panel3.add(label1);
panel3.add(tf1);
panel3.add(button1);
panel4.add(label2);
panel4.add(tf2);
panel4.add(button2);
panel5.add(label3);
panel5.add(tf3);
panel5.add(label4);
panel5.add(tf4);
panel5.add(button);
frame.add(panel1,BorderLayout.NORTH);
frame.setVisible(true);
button.addActionListener(this);
button1.addActionListener(this);
button2.addActionListener(this);
frame.addWindowListener(this);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==button){
flag_num=false;
if(checkNum(tf3.getText())==true&&checkNum(tf4.getText())){
width=(int) Double.parseDouble(tf3.getText());
height=(int) Double.parseDouble(tf4.getText());
flag_num=true;
}
else {
flag_num=false;
ta.append("XY填写格式不正确,请重新填写\n");
}
if(flag_in==true&&flag_out==true&&flag_num==true){
ta.append("目标文件列表\n");
int cnt=0;
for(int i=0;i<filelist.length;i++){
if(filelist[i]!=wzw){
File outtemp;
try {
RenderedImage im=convert(width,height,ImageIO.read(filelist[i]));
String outputFilename=filelist[i].getName();
String format=outputFilename.substring(outputFilename.lastIndexOf('.')+1);
outtemp=new File(fileout+"\\"+outputFilename);
//System.out.println(outputFilename);
if(outtemp.exists()==true){
int restartChoose=JOptionPane.showConfirmDialog(frame,"有相同名称的文件,是否覆盖?","提示",JOptionPane.OK_CANCEL_OPTION);
if(restartChoose==JOptionPane.OK_OPTION){
ImageIO.write(im,format,outtemp);
ta.append(outtemp.getAbsolutePath());
ta.append("\t\t"+"Finished"+"\n");
cnt++;
}
else{
return;
}
}
else{
ImageIO.write(im,format,outtemp);
ta.append(outtemp.getAbsolutePath());
ta.append("\t\t"+"Finished"+"\n");
cnt++;
}
}catch (IOException e2) {
e2.printStackTrace();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
ta.append("目标文件共"+cnt+"个\n");
}
}
else if(e.getSource()==button1){
flag_in=false;
filein=new File(tf1.getText());
if(filein.exists()==true&&filein.isDirectory()==true){
ta.append("\n源文件夹填写格式正确\n");
flag_in=true;
filelist=filein.listFiles();
for(int i=0;i<filelist.length;i++){
if(filelist[i].isFile()==false){
filelist[i]=wzw;
}
}
String ispic;
for(int i=0;i<filelist.length;i++){
if(filelist[i]!=wzw){
String temp;
temp=filelist[i].getName();
ispic=temp.substring(temp.lastIndexOf('.')+1);
if((ispic.equals("jpg")==false)&&(ispic.equals("bmp")==false)&&
(ispic.equals("gif")==false)&&(ispic.equals("png")==false)&&
(ispic.equals("JPG")==false)&&(ispic.equals("BMP")==false)&&
(ispic.equals("GIF")==false)&&(ispic.equals("PNG")==false)){
filelist[i]=wzw;
}
}
}
ta.append("源文件列表:\n");
int num=0;
for(int i=0;i<filelist.length;i++){
if(filelist[i]!=wzw){
ta.append(filelist[i]+"\n");
num++;
}
}
ta.append("源文件共"+num+"个\n");
ta.append("\n");
}
else{
ta.append("\n源文件夹不存在或者输入格式错误!\n");
flag_in=false;
}
}
else if(e.getSource()==button2){
flag_out=false;
fileout=new File(tf2.getText());
if(fileout.exists()==true&&fileout.isDirectory()==true){
ta.append("目标文件夹填写格式正确\n");
flag_out=true;
}
else {
ta.append("\n目标文件夹不存在或者输入格式错误!\n");
flag_out=false;
}
}
}
public void windowClosing(WindowEvent e){
System.exit(0);
}
public static void main(String[] args) throws Exception {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch(Exception e) {
}
new PicPro();
}
public static BufferedImage convert(int width,int height,BufferedImage input)throws Exception{
BufferedImage output=new BufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);
Image image=input.getScaledInstance(output.getWidth(),
output.getHeight(),output.getType());
output.createGraphics().drawImage(image,null,null);
return output;
}
public static boolean checkNum(String s){ //判断String是否为可转化为数字的字符串
int i;
boolean flag=false;
char paste_ch[]=s.toCharArray();
for(i=0;i<s.length();i++){
if((paste_ch[i]!='1')&&(paste_ch[i]!='2')&&(paste_ch[i]!='3')&&(paste_ch[i]!='4')&&
(paste_ch[i]!='5')&&(paste_ch[i]!='6')&&(paste_ch[i]!='7')&&(paste_ch[i]!='8')&&
(paste_ch[i]!='9')&&(paste_ch[i]!='0')&&(paste_ch[i]!='.')&&(paste_ch[i]!='-')){
flag=false;
break;
}
if((s.contains("-")==true&&s.startsWith("-")==false)||(s.contains(".")==true&&s.startsWith(".")==true)){
flag=false;
break;
}
flag=true;
}
return flag;
}
}
分享到:
相关推荐
批量改变图片大小
这时,“批量改变图片大小”的工具就显得尤为重要。标题提到的“批量改变图片大小软件”就是专为此目的而设计的实用工具。 这款软件的主要功能是帮助用户快速地调整多张图片的尺寸,避免了一张一张手动修改的繁琐...
"批量改图片大小工具"正是为了满足这种需求而设计的软件。它能够有效地帮助用户节省时间,提高工作效率,尤其对于处理大量图片时更为显著。 批量修改图片大小这一功能的核心在于图像处理算法。这种工具通常支持多种...
Image batch dispose批量图片处理工具,支持对批量图片的加文字,批量改变图片大小,批量更名,可以批量旋转图片,可以批量压缩图片文件大小,可以批量锐化图片,批量转换图片格式(bmp,jpg,gif,png,.tiff等)为Jpg格式....
本文主要讲解如何使用OpenCV批量更改图片的尺寸大小。这个过程对于处理大量图片,如图像数据预处理,尤其有用。以下是一些关键知识点: 1. **OpenCV的导入**: 首先,我们需要导入`cv2`模块,它是OpenCV的Python...
批量图片处理工具,支持对批量图片的加文字,批量改变图片大小,批量更名,批量转换图片格式(bmp,jpg,gif,png等).特别适用于含有上千种商品图片信息的电子商务网站管理人员和家庭中对数码照片的处理等. 批量加文字:电子...
总结起来,改图快手是一款高效的图片处理工具,其核心功能包括批量改变图片大小、修正旋转角度和添加水印,支持BMP和JPG格式,对于需要处理大量图片的用户来说,无疑是个得力助手。同时,提供的压缩包文件包含所有...
批量修改图片大小就是这样一个关键环节,它能够极大地提高工作效率,避免了逐一手动调整每张图片尺寸的繁琐过程。本文将深入探讨批量修改图片大小的工具及其工作原理,并提供关于如何使用此类工具的实用建议。 批量...
标题“批量改图片大小绿色版”暗示我们讨论的是一个能够一次性修改多张图片尺寸的应用程序。这个绿色版可能指的是它无需安装,即下载即用,且不含有任何第三方插件或者广告,通常这类软件体积小,运行快速。下面将...
它集成了批量改变图片大小、加水印和裁剪等实用功能,并且在处理过程中注重图片质量的保持,非常适合需要处理大量图片的专业人士使用。通过这样的工具,用户能够有效地管理图片库,节省时间,并确保最终图片的高清晰...
易语言批量修改图片大小V1.0是一款基于易语言编程的实用工具,主要功能是高效地处理大量图片,调整它们的尺寸。这个源码对于学习易语言编程、图像处理技术,以及了解批量处理算法的人来说非常有价值。下面我们将深入...
首先,我们来看标题"批量改变图片尺寸(像素、比例)MAC",这意味着我们要同时调整图片的像素大小和比例。像素是指图像中的最小单位,而比例则关系到图像的宽高比,保持正确的比例可以防止图片变形。在Mac上,系统...
这个工具名为"BatchImageResizer_v288",从标签可以看出,这是一个专为批量改变图片尺寸而设计的软件。批处理图像处理器通常具有用户友好的界面和多种自定义选项,例如设置新图片的宽度和高度、保持原始宽高比或强制...
"批量改图片大小和格式"是一个高效的工作方法,它可以帮助用户节省大量时间,尤其当处理大量图片时。这个工具或软件功能的核心在于其自动化的能力,能够一次性处理多张图片,对它们进行尺寸调整和格式转换。 首先,...
因此,调整图片大小是必要的,但同时要确保图像质量不受损。 在“图片批量处理”中,软件通常采用智能算法来压缩图片,这些算法能够识别并保留图片的重要细节,比如颜色、对比度和锐度,同时去除冗余的数据。这样,...
批量改变图片尺寸是一项非常实用的功能,可以极大地提高工作效率。本篇将详细介绍如何使用“批量改变图片尺寸”的工具——Light Image Resizer。 Light Image Resizer是一款轻量级且高效的图像处理软件,特别适用于...
"右键批量调整图片大小"是一个非常实用的工具,它简化了这个过程,使得用户可以高效地处理多种图片格式的文件,无需专业的图像编辑软件。 此工具特别之处在于它整合了Windows系统的右键菜单,用户只需双击安装程序...
"图片批量调整大小"就是一个针对这种需求的实用工具,它可以帮助用户快速、高效地改变多张图片的尺寸,大大提升了工作效率。以下是对这个工具及其相关知识点的详细说明: 1. **批量处理**:批量处理是此工具的核心...
②利用Opencv改变图片的分辨率(默认是缩小为原来一般的分辨率)并显示在mfc对话框一个图片控件中。 ③保存。对话框有一个保存按钮。用于保存更改了分辨率之后的图片。(对于更改了之后的图片。又可以再次执行相同的...