`
yaoweinan
  • 浏览: 138390 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

图片裁剪,缩放 批处理

    博客分类:
  • j2se
 
阅读更多

package dwr.demo;

 

import java.awt.Color;

import java.awt.FileDialog;

import java.awt.FlowLayout;

import java.awt.Image;

import java.awt.Rectangle;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.Iterator;

 

import javax.imageio.ImageIO;

import javax.imageio.ImageReadParam;

import javax.imageio.ImageReader;

import javax.imageio.stream.ImageInputStream;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

 

import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGImageEncoder;

 

 

public class ImgReSize {

private JFrame frame;

private JButton chooseImgDirBtn;

private JTextField  ImgDirLab;

private JButton saveImgDirBtn;

private JTextField  saveDirLab;

private JButton ok_btn;

private JButton reset_btn;

private JTextField w=new JTextField();

private JTextField h=new JTextField();

private JTextField left=new JTextField(2);

private JTextField top=new JTextField(2);

private JTextField cutW=new JTextField(2);

private JTextField cutH=new JTextField(2);

private JPanel pro=new JPanel();

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

new ImgReSize();

}

ImgReSize(){

frame=new JFrame("图片批量改变大小");

frame.setBounds(Toolkit.getDefaultToolkit().getScreenSize().width/2-150,Toolkit.getDefaultToolkit().getScreenSize().height/2-100,300, 200);

frame.setResizable(false);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//frame.add(chooceImgDir);

frame.setLayout(new FlowLayout(FlowLayout.LEFT));

ImgDirLab=new JTextField();ImgDirLab.setColumns(15);ImgDirLab.setEditable(false);

frame.add(ImgDirLab);

chooseImgDirBtn=new JButton("需转换的目录");

chooseImgDirBtn.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

FileDialog chooceImgDir=new FileDialog(new JFrame(),"请选择要转换的文件目录",FileDialog.LOAD);

  chooceImgDir.setVisible(true);

  ImgDirLab.setText(chooceImgDir.getDirectory());

  chooseImgDirBtn.setEnabled(false);

}});

frame.add(chooseImgDirBtn);

saveDirLab=new JTextField();saveDirLab.setColumns(15);saveDirLab.setEditable(false);

frame.add(saveDirLab);

saveImgDirBtn=new JButton("保存的目录");

saveImgDirBtn.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

FileDialog chooceImgDir=new FileDialog(new JFrame(),"请选择要保存的文件目录",FileDialog.LOAD);

  chooceImgDir.setVisible(true);

  saveDirLab.setText(chooceImgDir.getDirectory());

  saveImgDirBtn.setEnabled(false);

}});

frame.add(saveImgDirBtn);

frame.add(new JLabel("输入大小:"));

w.setColumns(3);h.setColumns(3);

frame.add(w);frame.add(new JLabel("X"));

frame.add(h);

ok_btn=new  JButton("转换");

ok_btn.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(w.getText().equals("")||h.getText().equals("")||ImgDirLab.getText().equals("")||saveDirLab.getText().equals(""))return;

final int width=Integer.parseInt(w.getText());

final int hieght=Integer.parseInt(h.getText());

final int Ctop=Integer.parseInt(top.getText());

final int Cleft=Integer.parseInt(left.getText());

final int CutW=Integer.parseInt(cutW.getText());

final int CutH=Integer.parseInt(cutH.getText());

final String basePath=ImgDirLab.getText(); 

final String exportPath=saveDirLab.getText(); 

File file = new File(basePath);

File []files=file.listFiles();

if(files!=null){

float jg=(float) (frame.getWidth()/(files.length*1.0));

for(int i=0;i<files.length;i++){

File tmp=files[i];

if(tmp.isFile()){

String name=tmp.getName();

//System.out.println(tmp.getName());

String syn=name.substring(name.indexOf('.'));

if(syn!=null&&(syn.equalsIgnoreCase(".GIF")||syn.equalsIgnoreCase(".PNG")||syn.equalsIgnoreCase(".JPG"))){

///System.out.println(name);

try {

FileInputStream in=new FileInputStream(tmp);

byte[] b=new byte[2*1024*1024];

in.read(b);

in.close();

byte[]tb1=this.cut(b,Ctop,Cleft,CutW,CutH);

byte[]tb=this.fixPic(tb1,width,hieght);

FileOutputStream out=new FileOutputStream(exportPath+name);

out.write(tb);

out.flush();

out.close();pro.setSize((int)((i+1)*jg), 15);

} catch (FileNotFoundException e1) {

e1.printStackTrace();

}catch (IOException e1) {

e1.printStackTrace();

}

}

}

}

}

System.out.println("转换完成!");

}

private byte[] fixPic(byte[] bts,int w,int h){ 

try { 

 

Image img=ImageIO.read(new ByteArrayInputStream(bts)); 

BufferedImage tag = new BufferedImage(w,  h, BufferedImage.TYPE_INT_RGB); 

tag.getGraphics().drawImage(img.getScaledInstance(w, h, Image.SCALE_SMOOTH), 0, 0, null); 

ByteArrayOutputStream out=new ByteArrayOutputStream(); 

JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(out); 

encoder.encode(tag); 

byte[] by= out.toByteArray(); 

out.close(); 

return by; 

} catch (IOException e) { 

e.printStackTrace(); 

return null; 

 

private byte[] cut(byte[] bts,int left,int top,int w,int hight){

try {

Iterator readers = ImageIO.getImageReadersByFormatName("jpg");

           System.out.println(readers);

           ImageReader reader = (ImageReader)readers.next();

           InputStream source=new ByteArrayInputStream(bts);

           ImageInputStream iis = ImageIO.createImageInputStream(source);

           reader.setInput(iis, true);

           ImageReadParam param = reader.getDefaultReadParam();

           int imageIndex = 0;

           int half_width = reader.getWidth(imageIndex)/2;

           int half_height = reader.getHeight(imageIndex)/2;

           Rectangle rect = new Rectangle(60, 60, 100, 100);

           param.setSourceRegion(rect);

           BufferedImage bi = reader.read(0,param);

           ByteArrayOutputStream out=new ByteArrayOutputStream(); 

           ImageIO.write(bi, "jpg",out);  

           return out.toByteArray();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

return bts;

}

});

frame.add(ok_btn);

reset_btn=new  JButton("重置");

reset_btn.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

ImgDirLab.setText("");

saveDirLab.setText("");

chooseImgDirBtn.setEnabled(true);

saveImgDirBtn.setEnabled(true);

}});

frame.add(reset_btn);

frame.add(new JLabel("裁剪位置:"));

frame.add(new JLabel("top:"));

frame.add(this.top);

frame.add(new JLabel("left:"));

frame.add(this.left);

frame.add(new JLabel("w:"));

frame.add(this.cutW);

frame.add(new JLabel("h:"));

frame.add(this.cutH);

pro.setBackground(Color.GREEN);pro.setLayout(null);

frame.add(pro);frame.add(pro);

frame.setVisible(true);

 

}

}


分享到:
评论

相关推荐

    图片 批处理 裁剪 压缩 尺寸

    接下来,我们谈谈图片裁剪。裁剪图片是去除不必要的部分,聚焦于图像的重点。批处理裁剪可以统一调整图片的构图或删除边缘杂乱的元素。这同样可以通过上述的软件工具完成,设置裁剪区域的坐标和大小,然后应用到所有...

    Python代码批处理图片,按照宽度等比例缩放

    本文将深入探讨如何使用Python进行图片批处理,特别是按照宽度等比例缩放,以提升工作效率,适用于电商网店的商品图批量处理。 首先,我们需要了解基本的图像处理概念。图像通常由像素组成,其尺寸可以用宽度和高度...

    图片批处理软件

    在图片处理领域,批处理允许用户对一组照片应用相同的编辑效果,例如调整亮度和对比度、裁剪、旋转、去除红眼效应等。这对于摄影师或者需要处理大量图片的用户来说,是一个非常实用的功能。 接下来,我们探讨一下...

    提升效率 PhotoShop批处理图片技巧

    3. 为防止意外,最好先在少量图片上测试批处理,确认效果无误后再处理大批量图片。 五、提高批处理效率的技巧 1. 使用“智能对象”进行批处理,这样在后期修改动作时,所有已处理的图片都能同步更新。 2. 组合多个...

    图片批处理

    欢迎使用《iPai图片批处理》5.8版! 《iPai 图片批处理》是一款旨在简化图片...摄像头拍照、屏幕截图、图片裁剪、移动图片、颜色矩阵、制作边框等更多功能使用技巧请关注我们的官方网站和论坛,这里不再一一列举。

    电商图片批处理软件

    1. **缩放**:图片大小的调整是常见的需求,软件能够自动或手动调整图片尺寸,适应不同展示场景,如产品详情页、广告横幅等。 2. **剪切**:通过裁剪功能,用户可以选择图片的特定区域进行保留,去除不必要的背景或...

    图像批处理方法-图像空白裁剪、灰度化、缩放

    按照目录对图像进行灰度化、缩放(比例默认为1/3)、空白处裁剪(裁剪掉图片多余的空白) =图像周边空白裁剪:按行和列统计图像四周的空白率,空白率过高的行和列将被裁剪掉(方法中设置为0.8,以灰度值大于0,9表示空白...

    批处理图片

    4. 裁剪与旋转:自动或手动裁剪图片,以及批量旋转图片,纠正拍摄时的倾斜问题。 5. 添加水印:为保护版权或美观,可以批量添加文字、图像水印,水印的位置、透明度可调。 6. 色彩调整:包括亮度、对比度、饱和度...

    Tinuous_gr_图片批处理.zip

    5. **尺寸调整**:根据需要,用户可以设定图片的输出尺寸,无论是缩放还是裁剪,Tinuous都能轻松应对。这对于需要上传到特定平台或者调整为手机壁纸等用途非常实用。 6. **精简设计**:虽然功能强大,但Tinuous保持...

    基于Matlab的图片自动批处理程序(分辨率+命名+地理位置)

    % 1、自动缩放并裁剪图片为指定比例和分辨率大小,以全屏适应数码相框 % 2、按照"序号+时间"重命名图片(时间从拍摄时间、修改时间等内容中按优先级顺序选择),这样不管按照修改时间还是按照文件名都能正确排序了 %...

    opencv批处理.docx

    例如,可以加入图像的缩放、旋转、裁剪、噪声去除等步骤。同时,要注意在处理大量图像时,应考虑性能优化,如使用多线程或者异步处理,以减少总体处理时间。 总的来说,OpenCV的批处理能力使得开发者能够高效地对...

    C#编写源代码 一个图片查看及小量批处理控件

    - 图像操作:支持常见的图像处理操作,如旋转、裁剪、缩放、调整亮度和对比度等。这需要用到Graphics类的方法和ImageAttributes类进行颜色矩阵处理。 - 批处理:设计一个批量处理功能,可以遍历指定目录下的所有...

    Win10图片查看器bat、win7图片查看器

    在Windows 10中,图片查看器是一个轻量级的应用,提供基本的图片预览和导航功能,如缩放、旋转、幻灯片展示等。它支持多种常见的图片格式,如JPEG、PNG、GIF、BMP等。用户可以通过双击图片文件或右键选择“打开方式...

    批处理软件

    2. **调整尺寸**:批量改变图片大小是常见的需求,例如将所有图片统一缩放为适合网络上传或打印的尺寸。MiniPhoto可能会提供预设尺寸选项或允许用户自定义。 3. **格式转换**:不同场合可能需要不同格式的图片,如...

    图片批处理软件-可实现添加多种边框、水印、修改像素、尺寸

    同时,它也允许用户按比例或自定义尺寸缩放图片,确保在打印或网络上传时达到理想的显示效果。 此外,这款软件可能还包含了其他高级功能,如色彩校正、滤镜应用、裁剪与旋转、去噪与锐化等。色彩校正可以修正图片的...

    图像批处理专家 V1.31

    6. **批量裁剪**:按照指定的尺寸或比例进行批量裁剪,快速去除图片边缘的多余部分。 7. **合并图片**:将多张图片拼接成一张,适合制作全景图或组合图。 8. **质量优化**:根据需要调整图片的压缩级别,平衡文件...

    使用pycuda对图片进行预处理.zip

    3. **尺寸调整**:为了适应模型的输入要求,图像可能需要被裁剪或缩放。`WarpAffine`是一种图像变换方法,它可以改变图像的几何形状,例如旋转、缩放、平移。PyCUDA可以加速这种操作。 4. **色彩空间转换**:根据...

    美图秀秀批量修图绿色版(免安装)

    美图秀秀批量修图允许用户预设一个标准尺寸,所有导入的图片都将按照这个尺寸进行裁剪或拉伸,确保了图片的一致性,避免了逐个调整的繁琐。 其次,“缩放”功能是另一个常用的操作。它可以帮助我们调整图片的大小,...

    python 批量处理图片程序

    它支持常见的图像处理操作,如缩放、裁剪、旋转等。 在批量处理图片时,我们通常会用到os库来遍历文件夹。通过os.listdir()函数,我们可以获取指定目录下的所有文件名,然后根据文件扩展名筛选出图片文件。例如,...

Global site tag (gtag.js) - Google Analytics