Flask接口签名sign原理与实例代码浅析
279
2023-04-08
Java基于装饰者模式实现的图片工具类实例【附demo源码下载】
本文实例讲述了java基于装饰者模式实现的图片工具类。分享给大家供大家参考,具体如下:
ImgUtil.java:
/*
* 装饰者模式实现图片处理工具类
* 类似java的io流 -
* Img类似低级流可以独立使用
* Press和Resize类似高级流
* 需要依赖于低级流
*/
package util;
import java.io.File;
import java.util.List;
/**
* 图片工具类(装饰者)和图片(被装饰者)的公共接口
* @author xlk
*/
public interface ImgUtil {
/** 装饰方法 - 处理图片 */
List
}
AbstractImgUtil.java:
package util;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
/**
* 抽象图片工具类 - 抽象装饰者
* @author xlk
*/
public abstract class AbstractImgUtil implements ImgUtil {
private ImgUtil imgUtil;
@Override
public List
return imgUtil.dispose();
}
public AbstractImgUtil(){}
public AbstractImgUtil(ImgUtil imgUtil) {
this.imgUtil = imgUtil;
}
/**
* 判断文件是不是图片
* @param file 被判断的文件
* @return 图片返回true 非图片返回false
* @throws IOException
*/
public static boolean isImg(File file) {
if (file.isDirectory()) {
return false;
}
try {
ImageInputStream iis = ImageIO.createImageInputStream(file);
Iterator
if (!iter.hasNext()) {//文件不是图片
return false;
}
return true;
} catch (IOException e) {
return false;
}
}
}
Press.java:
package util;
import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.imageio.ImageIO;
/**
* 加水印 - 装饰者
* @author xlk
*/
public class Press extends AbstractImgUtil {
private List
private String waterImg;//水印图片路径
private Integer x; //水印图片距离目标图片左侧的偏移量, 如果x<0, 则在正中间
private Integer y; //水印图片距离目标图片上侧的偏移量, 如果y<0, 则在正中间
private float alpha; //水印透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明)
@Override
public List
src = super.dispose();
return press();
}
/** 加水印 - 具体装饰方法 */
private List
if (waterImg==null || "".equals(waterImg)) {
throw new RuntimeException("水印路径不能为空");
}
if (!isImg(new File(waterImg))) {
throw new RuntimeException("水印路径所指向的文件不是图片");
}
if (src.size()<=0) {
return src;
}
if (x!=null && y!=null) {
for (File f: src) {
press(f.getPath(), waterImg, f.getParent(), x, y, alpha);
}
} else {
for (File f: src) {
press(f.getPath(), waterImg, f.getParent(), alpha);
}
}
return src;
}
public Press() {}
public Press(ImgUtil imgUtil, String waterImg, float alpha) {
super(imgUtil);
this.waterImg = waterImg;
this.alpha = alpha;
}
public Press(ImgUtil imgUtil, String waterImg, Integer x, Integer y, float alpha) {
super(imgUtil);
this.waterImg = waterImg;
this.x = x;
this.y = y;
this.alpha = alpha;
}
public String getWaterImg() {
return waterImg;
}
public void setWaterImg(String waterImg) {
this.waterImg = waterImg;
}
public Integer getX() {
return x;
}
public void setX(Integer x) {
this.x = x;
}
public Integer getY() {
return y;
}
public void setY(Integer y) {
this.y = y;
}
public float getAlpha() {
return alpha;
}
public void setAlpha(float alpha) {
this.alpha = alpha;
}
/** 添加图片水印 */
private static void press(String src, String waterImg, String target, int x, int y, float alpha) {
File newFile = null;
try {
File file = new File(src);
Image image = ImageIO.read(file);
int width = image.getWidth(null);
int height = image.getHeight(null);
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufferedImage.createGraphics();
g.drawImage(image, 0, 0, width, height, null);
Image waterImage = ImageIO.read(new File(waterImg)); // 水印文件
int width_1 = waterImage.getWidth(null);
int height_1 = waterImage.getHeight(null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
int widthDiff = width - width_1;
int heightDiff = height - height_1;
if (x < 0) {
x = widthDiff / 2;
} else if (x > widthDiff) {
x = widthDiff;
}
if (y < 0) {
y = heightDiff / 2;
} else if (y > heightDiff) {
y = heightDiff;
}
g.drawImage(waterImage, x, y, width_1, height_1, null); // 水印文件结束
g.dispose();
File dir = new File(target);
if (!dir.exists()) {
dir.mkdirs();
}
newFile = new File(target + File.separator + file.getName());
ImageIO.write(bufferedImage, "jpg", newFile);
} catch (IOException e) {
e.printStackTrace();
}
}
/** 平铺添加图片水印 */
private static void press(String src, String waterImg, String target, float alpha) {
File newFile = null;
try {
File file = new File(src);
Image image = ImageIO.read(file);
int width = image.getWidth(null);
int height = image.getHeight(null);
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufferedImage.createGraphics();
g.drawImage(image, 0, 0, width, height, null);
Image waterImage = ImageIO.read(new File(waterImg)); // 水印文件
int width_1 = waterImage.getWidth(null);
int height_1 = waterImage.getHeight(null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
int rpt_x = width>width_1?(int)Math.ceil(Double.valueOf(width)/width_1):1;//x方向重复次数
int rpt_y = height>height_1?(int)Math.ceil(Double.valueOf(height)/height_1):1;//y方向重复次数
for (int i=0; i for (int j=0; j g.drawImage(waterImage, i*width_1, j*height_1, width_1, height_1, null); } }// 水印文件结束 g.dispose(); File dir = new File(target); if (!dir.exists()) { dir.mkdirs(); } newFile = new File(target + File.separator + file.getName()); ImageIO.write(bufferedImage, "jpg", newFile); } catch (IOException e) { e.printStackTrace(); } } } Resize.java: package util; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.List; import javax.imageio.ImageIO; /** * 缩放 - 装饰者 * @author xlk */ public class Resize extends AbstractImgUtil { /** 比例不同边界颜色 */ private static final Color color = new Color(230,230,230); private List private int height; //处理后高度 private int width; //处理后宽度 private double ratio; //处理后高宽比 private boolean bb; //比例不对时是否补白 @Override public List src = super.dispose(); return resize(); } /** 缩放 - 具体装饰方法 */ private List if (src.size()<=0) { return src; } if (ratio>0) { for (File f: src) { resize(f.getPath(), f.getParent(), ratio, bb); } } else if (hehttp://ight>0 && width>0) { for (File f: src) { resize(f.getPath(), f.getParent(), height, width, bb); } } return src; } public Resize() {} public Resize(ImgUtil imgUtil, int height, int width, boolean bb) { super(imgUtil); this.height = height; this.width = width; this.bb = bb; } public Resize(ImgUtil imgUtil, double ratio, boolean bb) { super(imgUtil); this.ratio = ratio; this.bb = bb; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public double getRatio() { return ratio; } public void setRatio(double ratio) { this.ratio = ratio; } public boolean isBb() { return bb; } public void setBb(boolean bb) { this.bb = bb; } /** 图片缩放-按照尺寸 */ private static void resize(String src, String target, int height, int width, boolean bb) { File newFile = null; try { double ratio = 0; //缩放比例 File f = new File(src); BufferedImage bi = ImageIO.read(f); Image itemp = bi.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH); //计算比例 if (Double.valueOf(bi.getHeight())/bi.getWidth() > Double.valueOf(height)/width) { ratio = Double.valueOf(height) / bi.getHeight(); } else { ratio = Double.valueOf(width) / bi.getWidth(); } AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null); itemp = op.filter(bi, null); if (bb) { BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setColor(color); g.fillRect(0, 0, width, height); if (width == itemp.getWidth(null)) g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), color, null); else g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), color, null); g.dispose(); itemp = image; } File dir = new File(target); if (!dir.exists()) { dir.mkdirs(); } newFile = new File(target + File.separator + f.getName()); ImageIO.write((BufferedImage) itemp, "jpg", newFile); } catch (IOException e) { e.printStackTrace(); } } /** 图片缩放-按照高宽比 */ private static void resize(String src, String target, double ratio, boolean bb) { File newFile = null; try { File f = new File(src); BufferedImage bi = ImageIO.read(f); //计算尺寸 int width = bi.getWidth(); int height = bi.getHeight(); if (Double.valueOf(height)/width height = (int)(width*ratio); } else { width = (int)(Double.valueOf(height)/ratio); } Image itemp = bi.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH); AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(1, 1), null); itemp = op.filter(bi, null); if (bb) { BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setColor(color); g.fillRect(0, 0, width, height); if (width == itemp.getWidth(null)) g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), color, null); else g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), color, null); g.dispose(); itemp = image; } File dir = new File(target); if (!dir.exists()) { dir.mkdirs(); } newFile = new File(target + File.separator + f.getName()); ImageIO.write((BufferedImage) itemp, "jpg", newFile); } catch (IOException e) { e.printStackTrace(); } } } Img.java: package util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * 图片 - 原组件 * @author xlk */ public class Img implements ImgUtil { private String src; //源图片或图片文件夹路径 private String target; //目标文件夹路径 private boolean inner; //true-包含子文件夹, false-仅当前文件夹 @Override public List return copy(); } /** 复制 - 被装饰者初始状态 */ private List if (src==null || "".equals(src) || target==null || "".equals(target)) { throw new RuntimeException("源路径或目标路径不能为空"); } File srcFile = new File(src); List File targetDir = new File(target); if (!targetDir.exists()) { targetDir.mkdirs(); } a: if (srcFile.isDirectory()) {//源路径是文件夹 File[] subs = srcFile.listFiles(); if (subs.length<=0) { break a; } for (File sub: subs) { if (sub.isDirectory() && inner) { list.addAll(new Img(sub.getPath(), target+File.separator+sub.getName(), true).copy()); } else if (AbstractImgUtil.isImg(sub)) { list.add(copy(sub, target)); } } } else if (AbstractImgUtil.isImg(srcFile)) {//源路径是图片 list.add(copy(srcFile, target)); } return list; } private File copy(File file, String target) { FileInputStream fis = null; FileOutputStream fos = null; File newFile = null; try { fis = new FileInputStream(file); newFile = new File(target + File.separator + file.getName()); fos = new FileOutputStream(newFile); byte[] bs = new byte[1024*10]; int len = -1; while ((len=fis.read(bs))!=-1) { fos.write(bs, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (fis!=null) { fis.close(); } if (fos!=null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } return newFile; } public Img() {} public Img(String src, String target) { this.src = src; this.target = target; } public Img(String src, String target, boolean inner) { this.src = src; this.target = target; this.inner = inner; } public String getSrc() { return src; } public void setSrc(String src) { this.src = src; } public String getTarget() { return target; } public void setTarget(String target) { this.target = target; } public boolean isInner() { return inner; } public void setInner(boolean innCMlCPxPPer) { this.inner = inner; } } 附:完整实例代码点击此处本站下载。 更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》 希望本文所述对大家java程序设计有所帮助。
for (int j=0; j g.drawImage(waterImage, i*width_1, j*height_1, width_1, height_1, null); } }// 水印文件结束 g.dispose(); File dir = new File(target); if (!dir.exists()) { dir.mkdirs(); } newFile = new File(target + File.separator + file.getName()); ImageIO.write(bufferedImage, "jpg", newFile); } catch (IOException e) { e.printStackTrace(); } } } Resize.java: package util; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.List; import javax.imageio.ImageIO; /** * 缩放 - 装饰者 * @author xlk */ public class Resize extends AbstractImgUtil { /** 比例不同边界颜色 */ private static final Color color = new Color(230,230,230); private List private int height; //处理后高度 private int width; //处理后宽度 private double ratio; //处理后高宽比 private boolean bb; //比例不对时是否补白 @Override public List src = super.dispose(); return resize(); } /** 缩放 - 具体装饰方法 */ private List if (src.size()<=0) { return src; } if (ratio>0) { for (File f: src) { resize(f.getPath(), f.getParent(), ratio, bb); } } else if (hehttp://ight>0 && width>0) { for (File f: src) { resize(f.getPath(), f.getParent(), height, width, bb); } } return src; } public Resize() {} public Resize(ImgUtil imgUtil, int height, int width, boolean bb) { super(imgUtil); this.height = height; this.width = width; this.bb = bb; } public Resize(ImgUtil imgUtil, double ratio, boolean bb) { super(imgUtil); this.ratio = ratio; this.bb = bb; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public double getRatio() { return ratio; } public void setRatio(double ratio) { this.ratio = ratio; } public boolean isBb() { return bb; } public void setBb(boolean bb) { this.bb = bb; } /** 图片缩放-按照尺寸 */ private static void resize(String src, String target, int height, int width, boolean bb) { File newFile = null; try { double ratio = 0; //缩放比例 File f = new File(src); BufferedImage bi = ImageIO.read(f); Image itemp = bi.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH); //计算比例 if (Double.valueOf(bi.getHeight())/bi.getWidth() > Double.valueOf(height)/width) { ratio = Double.valueOf(height) / bi.getHeight(); } else { ratio = Double.valueOf(width) / bi.getWidth(); } AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null); itemp = op.filter(bi, null); if (bb) { BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setColor(color); g.fillRect(0, 0, width, height); if (width == itemp.getWidth(null)) g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), color, null); else g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), color, null); g.dispose(); itemp = image; } File dir = new File(target); if (!dir.exists()) { dir.mkdirs(); } newFile = new File(target + File.separator + f.getName()); ImageIO.write((BufferedImage) itemp, "jpg", newFile); } catch (IOException e) { e.printStackTrace(); } } /** 图片缩放-按照高宽比 */ private static void resize(String src, String target, double ratio, boolean bb) { File newFile = null; try { File f = new File(src); BufferedImage bi = ImageIO.read(f); //计算尺寸 int width = bi.getWidth(); int height = bi.getHeight(); if (Double.valueOf(height)/width height = (int)(width*ratio); } else { width = (int)(Double.valueOf(height)/ratio); } Image itemp = bi.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH); AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(1, 1), null); itemp = op.filter(bi, null); if (bb) { BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setColor(color); g.fillRect(0, 0, width, height); if (width == itemp.getWidth(null)) g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), color, null); else g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), color, null); g.dispose(); itemp = image; } File dir = new File(target); if (!dir.exists()) { dir.mkdirs(); } newFile = new File(target + File.separator + f.getName()); ImageIO.write((BufferedImage) itemp, "jpg", newFile); } catch (IOException e) { e.printStackTrace(); } } } Img.java: package util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * 图片 - 原组件 * @author xlk */ public class Img implements ImgUtil { private String src; //源图片或图片文件夹路径 private String target; //目标文件夹路径 private boolean inner; //true-包含子文件夹, false-仅当前文件夹 @Override public List return copy(); } /** 复制 - 被装饰者初始状态 */ private List if (src==null || "".equals(src) || target==null || "".equals(target)) { throw new RuntimeException("源路径或目标路径不能为空"); } File srcFile = new File(src); List File targetDir = new File(target); if (!targetDir.exists()) { targetDir.mkdirs(); } a: if (srcFile.isDirectory()) {//源路径是文件夹 File[] subs = srcFile.listFiles(); if (subs.length<=0) { break a; } for (File sub: subs) { if (sub.isDirectory() && inner) { list.addAll(new Img(sub.getPath(), target+File.separator+sub.getName(), true).copy()); } else if (AbstractImgUtil.isImg(sub)) { list.add(copy(sub, target)); } } } else if (AbstractImgUtil.isImg(srcFile)) {//源路径是图片 list.add(copy(srcFile, target)); } return list; } private File copy(File file, String target) { FileInputStream fis = null; FileOutputStream fos = null; File newFile = null; try { fis = new FileInputStream(file); newFile = new File(target + File.separator + file.getName()); fos = new FileOutputStream(newFile); byte[] bs = new byte[1024*10]; int len = -1; while ((len=fis.read(bs))!=-1) { fos.write(bs, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (fis!=null) { fis.close(); } if (fos!=null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } return newFile; } public Img() {} public Img(String src, String target) { this.src = src; this.target = target; } public Img(String src, String target, boolean inner) { this.src = src; this.target = target; this.inner = inner; } public String getSrc() { return src; } public void setSrc(String src) { this.src = src; } public String getTarget() { return target; } public void setTarget(String target) { this.target = target; } public boolean isInner() { return inner; } public void setInner(boolean innCMlCPxPPer) { this.inner = inner; } } 附:完整实例代码点击此处本站下载。 更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》 希望本文所述对大家java程序设计有所帮助。
g.drawImage(waterImage, i*width_1, j*height_1, width_1, height_1, null);
}
}// 水印文件结束
g.dispose();
File dir = new File(target);
if (!dir.exists()) {
dir.mkdirs();
}
newFile = new File(target + File.separator + file.getName());
ImageIO.write(bufferedImage, "jpg", newFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Resize.java:
package util;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.imageio.ImageIO;
/**
* 缩放 - 装饰者
* @author xlk
*/
public class Resize extends AbstractImgUtil {
/** 比例不同边界颜色 */
private static final Color color = new Color(230,230,230);
private List
private int height; //处理后高度
private int width; //处理后宽度
private double ratio; //处理后高宽比
private boolean bb; //比例不对时是否补白
@Override
public List
src = super.dispose();
return resize();
}
/** 缩放 - 具体装饰方法 */
private List
if (src.size()<=0) {
return src;
}
if (ratio>0) {
for (File f: src) {
resize(f.getPath(), f.getParent(), ratio, bb);
}
} else if (hehttp://ight>0 && width>0) {
for (File f: src) {
resize(f.getPath(), f.getParent(), height, width, bb);
}
}
return src;
}
public Resize() {}
public Resize(ImgUtil imgUtil, int height, int width, boolean bb) {
super(imgUtil);
this.height = height;
this.width = width;
this.bb = bb;
}
public Resize(ImgUtil imgUtil, double ratio, boolean bb) {
super(imgUtil);
this.ratio = ratio;
this.bb = bb;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public double getRatio() {
return ratio;
}
public void setRatio(double ratio) {
this.ratio = ratio;
}
public boolean isBb() {
return bb;
}
public void setBb(boolean bb) {
this.bb = bb;
}
/** 图片缩放-按照尺寸 */
private static void resize(String src, String target, int height, int width, boolean bb) {
File newFile = null;
try {
double ratio = 0; //缩放比例
File f = new File(src);
BufferedImage bi = ImageIO.read(f);
Image itemp = bi.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH);
//计算比例
if (Double.valueOf(bi.getHeight())/bi.getWidth() > Double.valueOf(height)/width) {
ratio = Double.valueOf(height) / bi.getHeight();
} else {
ratio = Double.valueOf(width) / bi.getWidth();
}
AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
itemp = op.filter(bi, null);
if (bb) {
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setColor(color);
g.fillRect(0, 0, width, height);
if (width == itemp.getWidth(null))
g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), color, null);
else
g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), color, null);
g.dispose();
itemp = image;
}
File dir = new File(target);
if (!dir.exists()) {
dir.mkdirs();
}
newFile = new File(target + File.separator + f.getName());
ImageIO.write((BufferedImage) itemp, "jpg", newFile);
} catch (IOException e) {
e.printStackTrace();
}
}
/** 图片缩放-按照高宽比 */
private static void resize(String src, String target, double ratio, boolean bb) {
File newFile = null;
try {
File f = new File(src);
BufferedImage bi = ImageIO.read(f);
//计算尺寸
int width = bi.getWidth();
int height = bi.getHeight();
if (Double.valueOf(height)/width height = (int)(width*ratio); } else { width = (int)(Double.valueOf(height)/ratio); } Image itemp = bi.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH); AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(1, 1), null); itemp = op.filter(bi, null); if (bb) { BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setColor(color); g.fillRect(0, 0, width, height); if (width == itemp.getWidth(null)) g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), color, null); else g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), color, null); g.dispose(); itemp = image; } File dir = new File(target); if (!dir.exists()) { dir.mkdirs(); } newFile = new File(target + File.separator + f.getName()); ImageIO.write((BufferedImage) itemp, "jpg", newFile); } catch (IOException e) { e.printStackTrace(); } } } Img.java: package util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * 图片 - 原组件 * @author xlk */ public class Img implements ImgUtil { private String src; //源图片或图片文件夹路径 private String target; //目标文件夹路径 private boolean inner; //true-包含子文件夹, false-仅当前文件夹 @Override public List return copy(); } /** 复制 - 被装饰者初始状态 */ private List if (src==null || "".equals(src) || target==null || "".equals(target)) { throw new RuntimeException("源路径或目标路径不能为空"); } File srcFile = new File(src); List File targetDir = new File(target); if (!targetDir.exists()) { targetDir.mkdirs(); } a: if (srcFile.isDirectory()) {//源路径是文件夹 File[] subs = srcFile.listFiles(); if (subs.length<=0) { break a; } for (File sub: subs) { if (sub.isDirectory() && inner) { list.addAll(new Img(sub.getPath(), target+File.separator+sub.getName(), true).copy()); } else if (AbstractImgUtil.isImg(sub)) { list.add(copy(sub, target)); } } } else if (AbstractImgUtil.isImg(srcFile)) {//源路径是图片 list.add(copy(srcFile, target)); } return list; } private File copy(File file, String target) { FileInputStream fis = null; FileOutputStream fos = null; File newFile = null; try { fis = new FileInputStream(file); newFile = new File(target + File.separator + file.getName()); fos = new FileOutputStream(newFile); byte[] bs = new byte[1024*10]; int len = -1; while ((len=fis.read(bs))!=-1) { fos.write(bs, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (fis!=null) { fis.close(); } if (fos!=null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } return newFile; } public Img() {} public Img(String src, String target) { this.src = src; this.target = target; } public Img(String src, String target, boolean inner) { this.src = src; this.target = target; this.inner = inner; } public String getSrc() { return src; } public void setSrc(String src) { this.src = src; } public String getTarget() { return target; } public void setTarget(String target) { this.target = target; } public boolean isInner() { return inner; } public void setInner(boolean innCMlCPxPPer) { this.inner = inner; } } 附:完整实例代码点击此处本站下载。 更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》 希望本文所述对大家java程序设计有所帮助。
height = (int)(width*ratio);
} else {
width = (int)(Double.valueOf(height)/ratio);
}
Image itemp = bi.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH);
AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(1, 1), null);
itemp = op.filter(bi, null);
if (bb) {
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setColor(color);
g.fillRect(0, 0, width, height);
if (width == itemp.getWidth(null))
g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), color, null);
else
g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), color, null);
g.dispose();
itemp = image;
}
File dir = new File(target);
if (!dir.exists()) {
dir.mkdirs();
}
newFile = new File(target + File.separator + f.getName());
ImageIO.write((BufferedImage) itemp, "jpg", newFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Img.java:
package util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* 图片 - 原组件
* @author xlk
*/
public class Img implements ImgUtil {
private String src; //源图片或图片文件夹路径
private String target; //目标文件夹路径
private boolean inner; //true-包含子文件夹, false-仅当前文件夹
@Override
public List
return copy();
}
/** 复制 - 被装饰者初始状态 */
private List
if (src==null || "".equals(src) || target==null || "".equals(target)) {
throw new RuntimeException("源路径或目标路径不能为空");
}
File srcFile = new File(src);
List
File targetDir = new File(target);
if (!targetDir.exists()) {
targetDir.mkdirs();
}
a:
if (srcFile.isDirectory()) {//源路径是文件夹
File[] subs = srcFile.listFiles();
if (subs.length<=0) {
break a;
}
for (File sub: subs) {
if (sub.isDirectory() && inner) {
list.addAll(new Img(sub.getPath(), target+File.separator+sub.getName(), true).copy());
} else if (AbstractImgUtil.isImg(sub)) {
list.add(copy(sub, target));
}
}
} else if (AbstractImgUtil.isImg(srcFile)) {//源路径是图片
list.add(copy(srcFile, target));
}
return list;
}
private File copy(File file, String target) {
FileInputStream fis = null;
FileOutputStream fos = null;
File newFile = null;
try {
fis = new FileInputStream(file);
newFile = new File(target + File.separator + file.getName());
fos = new FileOutputStream(newFile);
byte[] bs = new byte[1024*10];
int len = -1;
while ((len=fis.read(bs))!=-1) {
fos.write(bs, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fis!=null) {
fis.close();
}
if (fos!=null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return newFile;
}
public Img() {}
public Img(String src, String target) {
this.src = src;
this.target = target;
}
public Img(String src, String target, boolean inner) {
this.src = src;
this.target = target;
this.inner = inner;
}
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public boolean isInner() {
return inner;
}
public void setInner(boolean innCMlCPxPPer) {
this.inner = inner;
}
}
附:完整实例代码点击此处本站下载。
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~