图片上传
来源:互联网 发布:java 服务器文件同步 编辑:程序博客网 时间:2024/06/07 03:16
leo
不积跬步,无以至千里。不积小流无,以成江海。
- 目录视图
- 摘要视图
- 订阅
征文 | 从高考,到程序员 深度学习与TensorFlow入门一课搞定! CSDN日报20170614 ——《一个 5 年程序员的回忆及建议》
Java imageIO处理图像
标签: javanullimagedstosstring
2012-09-14 14:33 43626人阅读 评论(1) 收藏 举报
- package com.adam.dev.pic.easyImage;
- import java.awt.AlphaComposite;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.color.ColorSpace;
- import java.awt.image.BufferedImage;
- import java.awt.image.ColorConvertOp;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.util.Iterator;
- import java.util.List;
- import javax.imageio.ImageIO;
- import javax.imageio.ImageReadParam;
- import javax.imageio.ImageReader;
- import javax.imageio.stream.ImageInputStream;
- import com.sun.image.codec.jpeg.JPEGCodec;
- import com.sun.image.codec.jpeg.JPEGImageEncoder;
- /**
- * @author adam.胡升阳
- * 创建日期 2012-2-29
- */
- public class OperateImage{
- public OperateImage() {
- super();
- }
- /**
- * 对图片裁剪,并把裁剪新图片保存
- * @param srcPath 读取源图片路径
- * @param toPath 写入图片路径
- * @param x 剪切起始点x坐标
- * @param y 剪切起始点y坐标
- * @param width 剪切宽度
- * @param height 剪切高度
- * @param readImageFormat 读取图片格式
- * @param writeImageFormat 写入图片格式
- * @throws IOException
- */
- public void cropImage(String srcPath,String toPath,
- int x,int y,int width,int height,
- String readImageFormat,String writeImageFormat) throws IOException{
- FileInputStream fis = null ;
- ImageInputStream iis =null ;
- try{
- //读取图片文件
- fis = new FileInputStream(srcPath);
- Iterator it = ImageIO.getImageReadersByFormatName(readImageFormat);
- ImageReader reader = (ImageReader) it.next();
- //获取图片流
- iis = ImageIO.createImageInputStream(fis);
- reader.setInput(iis,true) ;
- ImageReadParam param = reader.getDefaultReadParam();
- //定义一个矩形
- Rectangle rect = new Rectangle(x, y, width, height);
- //提供一个 BufferedImage,将其用作解码像素数据的目标。
- param.setSourceRegion(rect);
- BufferedImage bi = reader.read(0,param);
- //保存新图片
- ImageIO.write(bi, writeImageFormat, new File(toPath));
- }finally{
- if(fis!=null)
- fis.close();
- if(iis!=null)
- iis.close();
- }
- }
- /**
- * 按倍率缩小图片
- * @param srcImagePath 读取图片路径
- * @param toImagePath 写入图片路径
- * @param widthRatio 宽度缩小比例
- * @param heightRatio 高度缩小比例
- * @throws IOException
- */
- public void reduceImageByRatio(String srcImagePath,String toImagePath,int widthRatio,int heightRatio) throws IOException{
- FileOutputStream out = null;
- try{
- //读入文件
- File file = new File(srcImagePath);
- // 构造Image对象
- BufferedImage src = javax.imageio.ImageIO.read(file);
- int width = src.getWidth();
- int height = src.getHeight();
- // 缩小边长
- BufferedImage tag = new BufferedImage(width / widthRatio, height / heightRatio, BufferedImage.TYPE_INT_RGB);
- // 绘制 缩小 后的图片
- tag.getGraphics().drawImage(src, 0, 0, width / widthRatio, height / heightRatio, null);
- out = new FileOutputStream(toImagePath);
- JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
- encoder.encode(tag);
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- if(out != null){
- out.close();
- }
- }
- }
- /**
- * 长高等比例缩小图片
- * @param srcImagePath 读取图片路径
- * @param toImagePath 写入图片路径
- * @param ratio 缩小比例
- * @throws IOException
- */
- public void reduceImageEqualProportion(String srcImagePath,String toImagePath,int ratio) throws IOException{
- FileOutputStream out = null;
- try{
- //读入文件
- File file = new File(srcImagePath);
- // 构造Image对象
- BufferedImage src = javax.imageio.ImageIO.read(file);
- int width = src.getWidth();
- int height = src.getHeight();
- // 缩小边长
- BufferedImage tag = new BufferedImage(width / ratio, height / ratio, BufferedImage.TYPE_INT_RGB);
- // 绘制 缩小 后的图片
- tag.getGraphics().drawImage(src, 0, 0, width / ratio, height / ratio, null);
- out = new FileOutputStream(toImagePath);
- JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
- encoder.encode(tag);
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- if(out != null){
- out.close();
- }
- }
- }
- /**
- * 按倍率放大图片
- * @param srcImagePath 读取图形路径
- * @param toImagePath 写入入行路径
- * @param widthRatio 宽度放大比例
- * @param heightRatio 高度放大比例
- * @throws IOException
- */
- public void enlargementImageByRatio(String srcImagePath,String toImagePath,int widthRatio,int heightRatio) throws IOException{
- FileOutputStream out = null;
- try{
- //读入文件
- File file = new File(srcImagePath);
- // 构造Image对象
- BufferedImage src = javax.imageio.ImageIO.read(file);
- int width = src.getWidth();
- int height = src.getHeight();
- // 放大边长
- BufferedImage tag = new BufferedImage(width * widthRatio, height * heightRatio, BufferedImage.TYPE_INT_RGB);
- //绘制放大后的图片
- tag.getGraphics().drawImage(src, 0, 0, width * widthRatio, height * heightRatio, null);
- out = new FileOutputStream(toImagePath);
- JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
- encoder.encode(tag);
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- if(out != null){
- out.close();
- }
- }
- }
- /**
- * 长高等比例放大图片
- * @param srcImagePath 读取图形路径
- * @param toImagePath 写入入行路径
- * @param ratio 放大比例
- * @throws IOException
- */
- public void enlargementImageEqualProportion(String srcImagePath,String toImagePath,int ratio) throws IOException{
- FileOutputStream out = null;
- try{
- //读入文件
- File file = new File(srcImagePath);
- // 构造Image对象
- BufferedImage src = javax.imageio.ImageIO.read(file);
- int width = src.getWidth();
- int height = src.getHeight();
- // 放大边长
- BufferedImage tag = new BufferedImage(width * ratio, height * ratio, BufferedImage.TYPE_INT_RGB);
- //绘制放大后的图片
- tag.getGraphics().drawImage(src, 0, 0, width * ratio, height * ratio, null);
- out = new FileOutputStream(toImagePath);
- JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
- encoder.encode(tag);
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- if(out != null){
- out.close();
- }
- }
- }
- /**
- * 重置图形的边长大小
- * @param srcImagePath
- * @param toImagePath
- * @param width
- * @param height
- * @throws IOException
- */
- public void resizeImage(String srcImagePath,String toImagePath,int width,int height) throws IOException{
- FileOutputStream out = null;
- try{
- //读入文件
- File file = new File(srcImagePath);
- // 构造Image对象
- BufferedImage src = javax.imageio.ImageIO.read(file);
- // 放大边长
- BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
- //绘制放大后的图片
- tag.getGraphics().drawImage(src, 0, 0, width, height, null);
- out = new FileOutputStream(toImagePath);
- JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
- encoder.encode(tag);
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- if(out != null){
- out.close();
- }
- }
- }
- /**
- * 横向拼接图片(两张)
- * @param firstSrcImagePath 第一张图片的路径
- * @param secondSrcImagePath 第二张图片的路径
- * @param imageFormat 拼接生成图片的格式
- * @param toPath 拼接生成图片的路径
- */
- public void joinImagesHorizontal(String firstSrcImagePath, String secondSrcImagePath,String imageFormat, String toPath){
- try {
- //读取第一张图片
- File fileOne = new File(firstSrcImagePath);
- BufferedImage imageOne = ImageIO.read(fileOne);
- int width = imageOne.getWidth();//图片宽度
- int height = imageOne.getHeight();//图片高度
- //从图片中读取RGB
- int[] imageArrayOne = new int[width*height];
- imageArrayOne = imageOne.getRGB(0,0,width,height,imageArrayOne,0,width);
- //对第二张图片做相同的处理
- File fileTwo = new File(secondSrcImagePath);
- BufferedImage imageTwo = ImageIO.read(fileTwo);
- int width2 = imageTwo.getWidth();
- int height2 = imageTwo.getHeight();
- int[] ImageArrayTwo = new int[width2*height2];
- ImageArrayTwo = imageTwo.getRGB(0,0,width,height,ImageArrayTwo,0,width);
- //ImageArrayTwo = imageTwo.getRGB(0,0,width2,height2,ImageArrayTwo,0,width2);
- //生成新图片
- //int height3 = (height>height2 || height==height2)?height:height2;
- BufferedImage imageNew = new BufferedImage(width*2,height,BufferedImage.TYPE_INT_RGB);
- //BufferedImage imageNew = new BufferedImage(width+width2,height3,BufferedImage.TYPE_INT_RGB);
- imageNew.setRGB(0,0,width,height,imageArrayOne,0,width);//设置左半部分的RGB
- imageNew.setRGB(width,0,width,height,ImageArrayTwo,0,width);//设置右半部分的RGB
- //imageNew.setRGB(width,0,width2,height2,ImageArrayTwo,0,width2);//设置右半部分的RGB
- File outFile = new File(toPath);
- ImageIO.write(imageNew, imageFormat, outFile);//写图片
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 横向拼接一组(多张)图像
- * @param pics 将要拼接的图像
- * @param type 图像写入格式
- * @param dst_pic 图像写入路径
- * @return
- */
- public boolean joinImageListHorizontal(String[] pics, String type, String dst_pic) {
- try {
- int len = pics.length;
- if (len < 1) {
- System.out.println("pics len < 1");
- return false;
- }
- File[] src = new File[len];
- BufferedImage[] images = new BufferedImage[len];
- int[][] imageArrays = new int[len][];
- for (int i = 0; i < len; i++) {
- src[i] = new File(pics[i]);
- images[i] = ImageIO.read(src[i]);
- int width = images[i].getWidth();
- int height = images[i].getHeight();
- imageArrays[i] = new int[width * height];// 从图片中读取RGB
- imageArrays[i] = images[i].getRGB(0, 0, width, height, imageArrays[i], 0, width);
- }
- int dst_width = 0;
- int dst_height = images[0].getHeight();
- for (int i = 0; i < images.length; i++) {
- dst_height = dst_height > images[i].getHeight() ? dst_height : images[i].getHeight();
- dst_width += images[i].getWidth();
- }
- //System.out.println(dst_width);
- //System.out.println(dst_height);
- if (dst_height < 1) {
- System.out.println("dst_height < 1");
- return false;
- }
- /*
- * 生成新图片
- */
- BufferedImage ImageNew = new BufferedImage(dst_width, dst_height, BufferedImage.TYPE_INT_RGB);
- int width_i = 0;
- for (int i = 0; i < images.length; i++) {
- ImageNew.setRGB(width_i, 0, images[i].getWidth(), dst_height, imageArrays[i], 0, images[i].getWidth());
- width_i += images[i].getWidth();
- }
- File outFile = new File(dst_pic);
- ImageIO.write(ImageNew, type, outFile);// 写图片
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- return true;
- }
- /**
- * 纵向拼接图片(两张)
- * @param firstSrcImagePath 读取的第一张图片
- * @param secondSrcImagePath 读取的第二张图片
- * @param imageFormat 图片写入格式
- * @param toPath 图片写入路径
- */
- public void joinImagesVertical(String firstSrcImagePath, String secondSrcImagePath,String imageFormat, String toPath){
- try {
- //读取第一张图片
- File fileOne = new File(firstSrcImagePath);
- BufferedImage imageOne = ImageIO.read(fileOne);
- int width = imageOne.getWidth();//图片宽度
- int height = imageOne.getHeight();//图片高度
- //从图片中读取RGB
- int[] imageArrayOne = new int[width*height];
- imageArrayOne = imageOne.getRGB(0,0,width,height,imageArrayOne,0,width);
- //对第二张图片做相同的处理
- File fileTwo = new File(secondSrcImagePath);
- BufferedImage imageTwo = ImageIO.read(fileTwo);
- int width2 = imageTwo.getWidth();
- int height2 = imageTwo.getHeight();
- int[] ImageArrayTwo = new int[width2*height2];
- ImageArrayTwo = imageTwo.getRGB(0,0,width,height,ImageArrayTwo,0,width);
- //ImageArrayTwo = imageTwo.getRGB(0,0,width2,height2,ImageArrayTwo,0,width2);
- //生成新图片
- //int width3 = (width>width2 || width==width2)?width:width2;
- BufferedImage imageNew = new BufferedImage(width,height*2,BufferedImage.TYPE_INT_RGB);
- //BufferedImage imageNew = new BufferedImage(width3,height+height2,BufferedImage.TYPE_INT_RGB);
- imageNew.setRGB(0,0,width,height,imageArrayOne,0,width);//设置上半部分的RGB
- imageNew.setRGB(0,height,width,height,ImageArrayTwo,0,width);//设置下半部分的RGB
- //imageNew.setRGB(0,height,width2,height2,ImageArrayTwo,0,width2);//设置下半部分的RGB
- File outFile = new File(toPath);
- ImageIO.write(imageNew, imageFormat, outFile);//写图片
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 纵向拼接一组(多张)图像
- * @param pics 将要拼接的图像数组
- * @param type 写入图像类型
- * @param dst_pic 写入图像路径
- * @return
- */
- public boolean joinImageListVertical(String[] pics, String type, String dst_pic) {
- try {
- int len = pics.length;
- if (len < 1) {
- System.out.println("pics len < 1");
- return false;
- }
- File[] src = new File[len];
- BufferedImage[] images = new BufferedImage[len];
- int[][] imageArrays = new int[len][];
- for (int i = 0; i < len; i++) {
- //System.out.println(i);
- src[i] = new File(pics[i]);
- images[i] = ImageIO.read(src[i]);
- int width = images[i].getWidth();
- int height = images[i].getHeight();
- imageArrays[i] = new int[width * height];// 从图片中读取RGB
- imageArrays[i] = images[i].getRGB(0, 0, width, height, imageArrays[i], 0, width);
- }
- int dst_height = 0;
- int dst_width = images[0].getWidth();
- for (int i = 0; i < images.length; i++) {
- dst_width = dst_width > images[i].getWidth() ? dst_width : images[i].getWidth();
- dst_height += images[i].getHeight();
- }
- //System.out.println(dst_width);
- //System.out.println(dst_height);
- if (dst_height < 1) {
- System.out.println("dst_height < 1");
- return false;
- }
- /*
- * 生成新图片
- */
- BufferedImage ImageNew = new BufferedImage(dst_width, dst_height, BufferedImage.TYPE_INT_RGB);
- int height_i = 0;
- for (int i = 0; i < images.length; i++) {
- ImageNew.setRGB(0, height_i, dst_width, images[i].getHeight(), imageArrays[i], 0, dst_width);
- height_i += images[i].getHeight();
- }
- File outFile = new File(dst_pic);
- ImageIO.write(ImageNew, type, outFile);// 写图片
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- return true;
- }
- /**
- * 合并图片(按指定初始x、y坐标将附加图片贴到底图之上)
- * @param negativeImagePath 背景图片路径
- * @param additionImagePath 附加图片�%A
阅读全文
0 0
- 图片上传
- 上传图片
- 上传图片
- 上传图片
- 上传图片
- 上传图片
- 图片上传
- 图片上传
- 上传图片
- 上传图片
- 图片上传
- 图片上传
- 图片上传
- 图片上传
- 上传图片
- 上传图片
- 上传图片
- 图片上传
- python脚本多渠道打包应用
- Python语法第9讲:面向对象
- struts2 在Action中访问WEB资源
- 图片上传
- priority_queue 建立最小堆
- 图片上传
- 范凌:设计与人工智能行业报告与商业实践(上)
- GreenDao3.2在AndroidStudio中的配置和初步使用
- 两个小效果(美女系列..)1.纯css和css3实现;2.jquery实现.
- javascript面向对象整理
- LVS NAT/DR/TUN三种工作模式详解(转)
- 自定义ImageView实现自动放大缩小动画
- 并发方式 之io多路复用
- 启动Tomcat报了一个异常Error starting static Resource