|
@@ -15,6 +15,7 @@ import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Iterator;
|
|
|
import java.util.List;
|
|
|
import java.util.Locale;
|
|
@@ -25,352 +26,398 @@ import javax.imageio.ImageWriteParam;
|
|
|
import javax.imageio.ImageWriter;
|
|
|
import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
|
|
|
|
|
|
+import cn.com.qmth.am.bean.ImageSize;
|
|
|
+
|
|
|
public final class ImageUtil {
|
|
|
|
|
|
- /**
|
|
|
- * 图片水印
|
|
|
- *
|
|
|
- * @param pressImg 水印图片
|
|
|
- * @param targetImg 目标图片
|
|
|
- * @param x 修正值 默认在中间
|
|
|
- * @param y 修正值 默认在中间
|
|
|
- * @param alpha 透明度
|
|
|
- */
|
|
|
- public final static void pressImage(String pressImg, String targetImg, int x, int y, float alpha) {
|
|
|
- try {
|
|
|
- File img = new File(targetImg);
|
|
|
- Image src = ImageIO.read(img);
|
|
|
- int wideth = src.getWidth(null);
|
|
|
- int height = src.getHeight(null);
|
|
|
- BufferedImage image = new BufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);
|
|
|
- Graphics2D g = image.createGraphics();
|
|
|
- g.drawImage(src, 0, 0, wideth, height, null);
|
|
|
- // 水印文件
|
|
|
- Image src_biao = ImageIO.read(new File(pressImg));
|
|
|
- int wideth_biao = src_biao.getWidth(null);
|
|
|
- int height_biao = src_biao.getHeight(null);
|
|
|
- g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
|
|
|
- g.drawImage(src_biao, (wideth - wideth_biao) / 2, (height - height_biao) / 2, wideth_biao, height_biao,
|
|
|
- null);
|
|
|
- // 水印文件结束
|
|
|
- g.dispose();
|
|
|
- ImageIO.write((BufferedImage) image, "jpg", img);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 图片水印
|
|
|
+ *
|
|
|
+ * @param pressImg
|
|
|
+ * 水印图片
|
|
|
+ * @param targetImg
|
|
|
+ * 目标图片
|
|
|
+ * @param x
|
|
|
+ * 修正值 默认在中间
|
|
|
+ * @param y
|
|
|
+ * 修正值 默认在中间
|
|
|
+ * @param alpha
|
|
|
+ * 透明度
|
|
|
+ */
|
|
|
+ public final static void pressImage(String pressImg, String targetImg, int x, int y, float alpha) {
|
|
|
+ try {
|
|
|
+ File img = new File(targetImg);
|
|
|
+ Image src = ImageIO.read(img);
|
|
|
+ int wideth = src.getWidth(null);
|
|
|
+ int height = src.getHeight(null);
|
|
|
+ BufferedImage image = new BufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);
|
|
|
+ Graphics2D g = image.createGraphics();
|
|
|
+ g.drawImage(src, 0, 0, wideth, height, null);
|
|
|
+ // 水印文件
|
|
|
+ Image src_biao = ImageIO.read(new File(pressImg));
|
|
|
+ int wideth_biao = src_biao.getWidth(null);
|
|
|
+ int height_biao = src_biao.getHeight(null);
|
|
|
+ g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
|
|
|
+ g.drawImage(src_biao, (wideth - wideth_biao) / 2, (height - height_biao) / 2, wideth_biao, height_biao,
|
|
|
+ null);
|
|
|
+ // 水印文件结束
|
|
|
+ g.dispose();
|
|
|
+ ImageIO.write((BufferedImage) image, "jpg", img);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
- * 文字水印
|
|
|
- *
|
|
|
- * @param pressText 水印文字
|
|
|
- * @param targetImg 目标图片
|
|
|
- * @param fontName 字体名称
|
|
|
- * @param fontStyle 字体样式
|
|
|
- * @param color 字体颜色
|
|
|
- * @param fontSize 字体大小
|
|
|
- * @param x 修正值
|
|
|
- * @param y 修正值
|
|
|
- * @param alpha 透明度
|
|
|
- */
|
|
|
- public static void pressText(String pressText, String targetImg, String fontName, int fontStyle, Color color,
|
|
|
- int fontSize, int x, int y, float alpha) {
|
|
|
- try {
|
|
|
- File img = new File(targetImg);
|
|
|
- Image src = ImageIO.read(img);
|
|
|
- int width = src.getWidth(null);
|
|
|
- int height = src.getHeight(null);
|
|
|
- BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
|
|
- Graphics2D g = image.createGraphics();
|
|
|
- g.drawImage(src, 0, 0, width, height, null);
|
|
|
- g.setColor(color);
|
|
|
- g.setFont(new Font(fontName, fontStyle, fontSize));
|
|
|
- g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
|
|
|
- g.drawString(pressText, (width - (getLength(pressText) * fontSize)) / 2 + x, (height - fontSize) / 2 + y);
|
|
|
- g.dispose();
|
|
|
- ImageIO.write((BufferedImage) image, "jpg", img);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 文字水印
|
|
|
+ *
|
|
|
+ * @param pressText
|
|
|
+ * 水印文字
|
|
|
+ * @param targetImg
|
|
|
+ * 目标图片
|
|
|
+ * @param fontName
|
|
|
+ * 字体名称
|
|
|
+ * @param fontStyle
|
|
|
+ * 字体样式
|
|
|
+ * @param color
|
|
|
+ * 字体颜色
|
|
|
+ * @param fontSize
|
|
|
+ * 字体大小
|
|
|
+ * @param x
|
|
|
+ * 修正值
|
|
|
+ * @param y
|
|
|
+ * 修正值
|
|
|
+ * @param alpha
|
|
|
+ * 透明度
|
|
|
+ */
|
|
|
+ public static void pressText(String pressText, String targetImg, String fontName, int fontStyle, Color color,
|
|
|
+ int fontSize, int x, int y, float alpha) {
|
|
|
+ try {
|
|
|
+ File img = new File(targetImg);
|
|
|
+ Image src = ImageIO.read(img);
|
|
|
+ int width = src.getWidth(null);
|
|
|
+ int height = src.getHeight(null);
|
|
|
+ BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
|
|
+ Graphics2D g = image.createGraphics();
|
|
|
+ g.drawImage(src, 0, 0, width, height, null);
|
|
|
+ g.setColor(color);
|
|
|
+ g.setFont(new Font(fontName, fontStyle, fontSize));
|
|
|
+ g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
|
|
|
+ g.drawString(pressText, (width - (getLength(pressText) * fontSize)) / 2 + x, (height - fontSize) / 2 + y);
|
|
|
+ g.dispose();
|
|
|
+ ImageIO.write((BufferedImage) image, "jpg", img);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
- * 缩放
|
|
|
- *
|
|
|
- * @param filePath 图片路径
|
|
|
- * @param newFileName 缩放完比图片路径
|
|
|
- * @param height 高度
|
|
|
- * @param width 宽度
|
|
|
- * @param bb 比例不对时是否需要补白
|
|
|
- */
|
|
|
- @SuppressWarnings("static-access")
|
|
|
- public static void resize(String filePath, String newFileName, int height, int width, String formatName,
|
|
|
- boolean bb) {
|
|
|
- try {
|
|
|
- double ratio = 0.0; // 缩放比例
|
|
|
- File f = new File(filePath);
|
|
|
- BufferedImage bi = ImageIO.read(f);
|
|
|
- Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
|
|
|
- // 计算比例
|
|
|
- if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
|
|
|
- if (bi.getHeight() > bi.getWidth()) {
|
|
|
- ratio = (new Integer(height)).doubleValue() / bi.getHeight();
|
|
|
- } else {
|
|
|
- ratio = (new Integer(width)).doubleValue() / 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.white);
|
|
|
- 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.white, null);
|
|
|
- else
|
|
|
- g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null),
|
|
|
- itemp.getHeight(null), Color.white, null);
|
|
|
- g.dispose();
|
|
|
- itemp = image;
|
|
|
- }
|
|
|
- BufferedImage outbi = null;
|
|
|
- if (itemp instanceof BufferedImage)
|
|
|
- outbi = (BufferedImage) itemp;
|
|
|
- else
|
|
|
- outbi = convertImageToBuffer(itemp);
|
|
|
+ /**
|
|
|
+ * 缩放
|
|
|
+ *
|
|
|
+ * @param filePath
|
|
|
+ * 图片路径
|
|
|
+ * @param newFileName
|
|
|
+ * 缩放完比图片路径
|
|
|
+ * @param height
|
|
|
+ * 高度
|
|
|
+ * @param width
|
|
|
+ * 宽度
|
|
|
+ * @param bb
|
|
|
+ * 比例不对时是否需要补白
|
|
|
+ */
|
|
|
+ @SuppressWarnings("static-access")
|
|
|
+ public static void resize(String filePath, String newFileName, int height, int width, String formatName,
|
|
|
+ boolean bb) {
|
|
|
+ try {
|
|
|
+ double ratio = 0.0; // 缩放比例
|
|
|
+ File f = new File(filePath);
|
|
|
+ BufferedImage bi = ImageIO.read(f);
|
|
|
+ Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
|
|
|
+ // 计算比例
|
|
|
+ if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
|
|
|
+ if (bi.getHeight() > bi.getWidth()) {
|
|
|
+ ratio = (new Integer(height)).doubleValue() / bi.getHeight();
|
|
|
+ } else {
|
|
|
+ ratio = (new Integer(width)).doubleValue() / 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.white);
|
|
|
+ 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.white, null);
|
|
|
+ else
|
|
|
+ g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null),
|
|
|
+ itemp.getHeight(null), Color.white, null);
|
|
|
+ g.dispose();
|
|
|
+ itemp = image;
|
|
|
+ }
|
|
|
+ BufferedImage outbi = null;
|
|
|
+ if (itemp instanceof BufferedImage)
|
|
|
+ outbi = (BufferedImage) itemp;
|
|
|
+ else
|
|
|
+ outbi = convertImageToBuffer(itemp);
|
|
|
|
|
|
- File newFile = null;
|
|
|
- if (newFileName == null || newFileName.length() == 0) {
|
|
|
- newFile = f;
|
|
|
- } else {
|
|
|
- newFile = new File(newFileName);
|
|
|
- if (!newFile.getParentFile().exists())
|
|
|
- newFile.getParentFile().mkdirs();
|
|
|
- }
|
|
|
- ImageIO.write(outbi, formatName, newFile);
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
+ File newFile = null;
|
|
|
+ if (newFileName == null || newFileName.length() == 0) {
|
|
|
+ newFile = f;
|
|
|
+ } else {
|
|
|
+ newFile = new File(newFileName);
|
|
|
+ if (!newFile.getParentFile().exists())
|
|
|
+ newFile.getParentFile().mkdirs();
|
|
|
+ }
|
|
|
+ ImageIO.write(outbi, formatName, newFile);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
- * 对流缩放
|
|
|
- *
|
|
|
- * @param input 图片流
|
|
|
- * @param formatName 图片格式
|
|
|
- * @param height 高度
|
|
|
- * @param width 宽度
|
|
|
- * @param bb 比例不对时是否需要补白
|
|
|
- */
|
|
|
- @SuppressWarnings("static-access")
|
|
|
- public static InputStream MemoryResize(InputStream input, String formatName, int height, int width, boolean bb) {
|
|
|
- try {
|
|
|
- double ratio = 0.0; // 缩放比例
|
|
|
- BufferedImage bi = ImageIO.read(input);
|
|
|
- Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
|
|
|
- // 计算比例
|
|
|
- if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
|
|
|
- if (bi.getHeight() > bi.getWidth()) {
|
|
|
- ratio = (new Integer(height)).doubleValue() / bi.getHeight();
|
|
|
- } else {
|
|
|
- ratio = (new Integer(width)).doubleValue() / 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.white);
|
|
|
- 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.white, null);
|
|
|
- else
|
|
|
- g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null),
|
|
|
- itemp.getHeight(null), Color.white, null);
|
|
|
- g.dispose();
|
|
|
- itemp = image;
|
|
|
- }
|
|
|
- ByteArrayOutputStream output = new ByteArrayOutputStream();
|
|
|
+ /**
|
|
|
+ * 对流缩放
|
|
|
+ *
|
|
|
+ * @param input
|
|
|
+ * 图片流
|
|
|
+ * @param formatName
|
|
|
+ * 图片格式
|
|
|
+ * @param height
|
|
|
+ * 高度
|
|
|
+ * @param width
|
|
|
+ * 宽度
|
|
|
+ * @param bb
|
|
|
+ * 比例不对时是否需要补白
|
|
|
+ */
|
|
|
+ @SuppressWarnings("static-access")
|
|
|
+ public static InputStream MemoryResize(InputStream input, String formatName, int height, int width, boolean bb) {
|
|
|
+ try {
|
|
|
+ double ratio = 0.0; // 缩放比例
|
|
|
+ BufferedImage bi = ImageIO.read(input);
|
|
|
+ Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
|
|
|
+ // 计算比例
|
|
|
+ if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
|
|
|
+ if (bi.getHeight() > bi.getWidth()) {
|
|
|
+ ratio = (new Integer(height)).doubleValue() / bi.getHeight();
|
|
|
+ } else {
|
|
|
+ ratio = (new Integer(width)).doubleValue() / 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.white);
|
|
|
+ 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.white, null);
|
|
|
+ else
|
|
|
+ g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null),
|
|
|
+ itemp.getHeight(null), Color.white, null);
|
|
|
+ g.dispose();
|
|
|
+ itemp = image;
|
|
|
+ }
|
|
|
+ ByteArrayOutputStream output = new ByteArrayOutputStream();
|
|
|
|
|
|
- BufferedImage outbi = null;
|
|
|
- if (itemp instanceof BufferedImage)
|
|
|
- outbi = (BufferedImage) itemp;
|
|
|
- else
|
|
|
- outbi = convertImageToBuffer(itemp);
|
|
|
+ BufferedImage outbi = null;
|
|
|
+ if (itemp instanceof BufferedImage)
|
|
|
+ outbi = (BufferedImage) itemp;
|
|
|
+ else
|
|
|
+ outbi = convertImageToBuffer(itemp);
|
|
|
|
|
|
- ImageIO.write(outbi, formatName, output);
|
|
|
- byte[] buff = output.toByteArray();
|
|
|
- return new ByteArrayInputStream(buff);
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- return null;
|
|
|
- }
|
|
|
+ ImageIO.write(outbi, formatName, output);
|
|
|
+ byte[] buff = output.toByteArray();
|
|
|
+ return new ByteArrayInputStream(buff);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
+ public static byte[] cutImage(byte[] img, String suff, int x, int y, int width, int height) {
|
|
|
+ InputStream in = null;
|
|
|
+ BufferedImage bi = null;
|
|
|
+ ByteArrayOutputStream output = null;
|
|
|
+ try {
|
|
|
+ in = new ByteArrayInputStream(img);
|
|
|
+ bi = ImageIO.read(in);
|
|
|
+ height = Math.min(height, bi.getHeight());
|
|
|
+ width = Math.min(width, bi.getWidth());
|
|
|
+ if (height <= 0)
|
|
|
+ height = bi.getHeight();
|
|
|
+ if (width <= 0)
|
|
|
+ width = bi.getWidth();
|
|
|
+ x = Math.min(Math.max(0, x), bi.getWidth() - width);
|
|
|
+ y = Math.min(Math.max(0, y), bi.getHeight() - height);
|
|
|
|
|
|
- public static byte[] cutImage(byte[] img, String suff, int x,int y, int width, int height) {
|
|
|
- InputStream in = null;
|
|
|
- BufferedImage bi = null;
|
|
|
- ByteArrayOutputStream output = null;
|
|
|
- try {
|
|
|
- in = new ByteArrayInputStream(img);
|
|
|
- bi = ImageIO.read(in);
|
|
|
- height = Math.min(height, bi.getHeight());
|
|
|
- width = Math.min(width, bi.getWidth());
|
|
|
- if (height <= 0)
|
|
|
- height = bi.getHeight();
|
|
|
- if (width <= 0)
|
|
|
- width = bi.getWidth();
|
|
|
- x = Math.min(Math.max(0, x), bi.getWidth() - width);
|
|
|
- y = Math.min(Math.max(0, y), bi.getHeight() - height);
|
|
|
+ BufferedImage bi_cropper = bi.getSubimage(x, y, width, height);
|
|
|
+ output = new ByteArrayOutputStream();
|
|
|
+ ImageIO.write(bi_cropper, suff, output);
|
|
|
+ byte[] ret = output.toByteArray();
|
|
|
+ return ret;
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ } finally {
|
|
|
+ try {
|
|
|
+ if (in != null) {
|
|
|
+ in.close();
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ if (output != null) {
|
|
|
+ output.close();
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- BufferedImage bi_cropper = bi.getSubimage(x, y, width, height);
|
|
|
- output = new ByteArrayOutputStream();
|
|
|
- ImageIO.write(bi_cropper, suff, output);
|
|
|
- byte[] ret = output.toByteArray();
|
|
|
- return ret;
|
|
|
- } catch (Exception e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
- } finally {
|
|
|
- try {
|
|
|
- if (in != null) {
|
|
|
- in.close();
|
|
|
- }
|
|
|
- } catch (IOException e) {
|
|
|
- }
|
|
|
- try {
|
|
|
- if (output != null) {
|
|
|
- output.close();
|
|
|
- }
|
|
|
- } catch (IOException e) {
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ public static int getLength(String text) {
|
|
|
+ int length = 0;
|
|
|
+ for (int i = 0; i < text.length(); i++) {
|
|
|
+ if (new String(text.charAt(i) + "").getBytes().length > 1) {
|
|
|
+ length += 2;
|
|
|
+ } else {
|
|
|
+ length += 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return length / 2;
|
|
|
+ }
|
|
|
|
|
|
- public static int getLength(String text) {
|
|
|
- int length = 0;
|
|
|
- for (int i = 0; i < text.length(); i++) {
|
|
|
- if (new String(text.charAt(i) + "").getBytes().length > 1) {
|
|
|
- length += 2;
|
|
|
- } else {
|
|
|
- length += 1;
|
|
|
- }
|
|
|
- }
|
|
|
- return length / 2;
|
|
|
- }
|
|
|
+ public static String getExtension(File f) {
|
|
|
+ return (f != null) ? getExtension(f.getName()) : "";
|
|
|
+ }
|
|
|
|
|
|
- public static String getExtension(File f) {
|
|
|
- return (f != null) ? getExtension(f.getName()) : "";
|
|
|
- }
|
|
|
+ public static String getExtension(String filename) {
|
|
|
+ return getExtension(filename, "");
|
|
|
+ }
|
|
|
|
|
|
- public static String getExtension(String filename) {
|
|
|
- return getExtension(filename, "");
|
|
|
- }
|
|
|
+ public static String getExtension(String filename, String defExt) {
|
|
|
+ if ((filename != null) && (filename.length() > 0)) {
|
|
|
+ int i = filename.lastIndexOf('.');
|
|
|
|
|
|
- public static String getExtension(String filename, String defExt) {
|
|
|
- if ((filename != null) && (filename.length() > 0)) {
|
|
|
- int i = filename.lastIndexOf('.');
|
|
|
+ if ((i > -1) && (i < (filename.length() - 1))) {
|
|
|
+ return filename.substring(i + 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return defExt;
|
|
|
+ }
|
|
|
|
|
|
- if ((i > -1) && (i < (filename.length() - 1))) {
|
|
|
- return filename.substring(i + 1);
|
|
|
- }
|
|
|
- }
|
|
|
- return defExt;
|
|
|
- }
|
|
|
+ public static String trimExtension(String filename) {
|
|
|
+ if ((filename != null) && (filename.length() > 0)) {
|
|
|
+ int i = filename.lastIndexOf('.');
|
|
|
+ if ((i > -1) && (i < (filename.length()))) {
|
|
|
+ return filename.substring(0, i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return filename;
|
|
|
+ }
|
|
|
|
|
|
- public static String trimExtension(String filename) {
|
|
|
- if ((filename != null) && (filename.length() > 0)) {
|
|
|
- int i = filename.lastIndexOf('.');
|
|
|
- if ((i > -1) && (i < (filename.length()))) {
|
|
|
- return filename.substring(0, i);
|
|
|
- }
|
|
|
- }
|
|
|
- return filename;
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 转化Image 为 BufferedImage
|
|
|
+ *
|
|
|
+ * @param img
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static BufferedImage convertImageToBuffer(Image img) {
|
|
|
+ BufferedImage bufferedImage = new BufferedImage(img.getWidth(null), img.getHeight(null),
|
|
|
+ BufferedImage.TYPE_INT_RGB);
|
|
|
+ Graphics g = bufferedImage.createGraphics();
|
|
|
+ g.drawImage(img, 0, 0, null);
|
|
|
+ g.dispose();
|
|
|
+ return bufferedImage;
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
- * 转化Image 为 BufferedImage
|
|
|
- *
|
|
|
- * @param img
|
|
|
- * @return
|
|
|
- */
|
|
|
- private static BufferedImage convertImageToBuffer(Image img) {
|
|
|
- BufferedImage bufferedImage = new BufferedImage(img.getWidth(null), img.getHeight(null),
|
|
|
- BufferedImage.TYPE_INT_RGB);
|
|
|
- Graphics g = bufferedImage.createGraphics();
|
|
|
- g.drawImage(img, 0, 0, null);
|
|
|
- g.dispose();
|
|
|
- return bufferedImage;
|
|
|
- }
|
|
|
+ // 拼接图片
|
|
|
+ public static byte[] joinImages(List<byte[]> slices, String suff) {
|
|
|
+ boolean horizontal = false;
|
|
|
+ List<BufferedImage> imageList = new ArrayList<>();
|
|
|
+ for (byte[] slice : slices) {
|
|
|
+ InputStream in = null;
|
|
|
+ try {
|
|
|
+ in = new ByteArrayInputStream(slice);
|
|
|
+ BufferedImage image = ImageIO.read(in);
|
|
|
+ imageList.add(image);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ } finally {
|
|
|
+ try {
|
|
|
+ if (in != null) {
|
|
|
+ in.close();
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ int height = imageList.get(0).getHeight();
|
|
|
+ int width = imageList.get(0).getWidth();
|
|
|
+ if (horizontal) {
|
|
|
+ height = imageList.stream().mapToInt(BufferedImage::getHeight).max().getAsInt();
|
|
|
+ width = imageList.stream().mapToInt(BufferedImage::getWidth).sum();
|
|
|
+ } else {
|
|
|
+ width = imageList.stream().mapToInt(BufferedImage::getWidth).max().getAsInt();
|
|
|
+ height = imageList.stream().mapToInt(BufferedImage::getHeight).sum();
|
|
|
+ }
|
|
|
+ // 创建拼接后的图片画布,参数分别为宽,高,类型,这里我们使用RGB3元色类型
|
|
|
+ BufferedImage resultImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
|
|
+ Graphics graphics = resultImage.getGraphics();
|
|
|
+ int previousWidth = 0;
|
|
|
+ int previousHeight = 0;
|
|
|
+ for (BufferedImage image : imageList) {
|
|
|
+ // 向画布上画图片
|
|
|
+ graphics.drawImage(image, previousWidth, previousHeight, null);
|
|
|
+ if (horizontal) {
|
|
|
+ previousWidth += image.getWidth();
|
|
|
+ } else {
|
|
|
+ previousHeight += image.getHeight();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ByteArrayOutputStream output = new ByteArrayOutputStream();
|
|
|
+ try {
|
|
|
+ Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName(suff);
|
|
|
+ ImageWriter imageWriter = iter.next();
|
|
|
+ JPEGImageWriteParam jpegParams = new JPEGImageWriteParam(Locale.getDefault());
|
|
|
+ jpegParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
|
|
|
+ jpegParams.setCompressionQuality(1.0F);
|
|
|
+ imageWriter.setOutput(ImageIO.createImageOutputStream(output));
|
|
|
+ imageWriter.write(null, new IIOImage(resultImage, null, null), jpegParams);
|
|
|
+ byte[] ret = output.toByteArray();
|
|
|
+ return ret;
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ } finally {
|
|
|
+ try {
|
|
|
+ if (output != null) {
|
|
|
+ output.close();
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // 拼接图片
|
|
|
- public static byte[] joinImages(List<byte[]> slices, String suff) {
|
|
|
- boolean horizontal = false;
|
|
|
- List<BufferedImage> imageList = new ArrayList<>();
|
|
|
- for (byte[] slice : slices) {
|
|
|
- InputStream in = null;
|
|
|
- try {
|
|
|
- in = new ByteArrayInputStream(slice);
|
|
|
- BufferedImage image = ImageIO.read(in);
|
|
|
- imageList.add(image);
|
|
|
- } catch (Exception e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
- } finally {
|
|
|
- try {
|
|
|
- if (in != null) {
|
|
|
- in.close();
|
|
|
- }
|
|
|
- } catch (IOException e) {
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- int height = imageList.get(0).getHeight();
|
|
|
- int width = imageList.get(0).getWidth();
|
|
|
- if (horizontal) {
|
|
|
- height = imageList.stream().mapToInt(BufferedImage::getHeight).max().getAsInt();
|
|
|
- width = imageList.stream().mapToInt(BufferedImage::getWidth).sum();
|
|
|
- } else {
|
|
|
- width = imageList.stream().mapToInt(BufferedImage::getWidth).max().getAsInt();
|
|
|
- height = imageList.stream().mapToInt(BufferedImage::getHeight).sum();
|
|
|
- }
|
|
|
- // 创建拼接后的图片画布,参数分别为宽,高,类型,这里我们使用RGB3元色类型
|
|
|
- BufferedImage resultImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
|
|
- Graphics graphics = resultImage.getGraphics();
|
|
|
- int previousWidth = 0;
|
|
|
- int previousHeight = 0;
|
|
|
- for (BufferedImage image : imageList) {
|
|
|
- // 向画布上画图片
|
|
|
- graphics.drawImage(image, previousWidth, previousHeight, null);
|
|
|
- if (horizontal) {
|
|
|
- previousWidth += image.getWidth();
|
|
|
- } else {
|
|
|
- previousHeight += image.getHeight();
|
|
|
- }
|
|
|
- }
|
|
|
- ByteArrayOutputStream output = new ByteArrayOutputStream();
|
|
|
- try {
|
|
|
- Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName(suff);
|
|
|
- ImageWriter imageWriter = iter.next();
|
|
|
- JPEGImageWriteParam jpegParams = new JPEGImageWriteParam(Locale.getDefault());
|
|
|
- jpegParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
|
|
|
- jpegParams.setCompressionQuality(1.0F);
|
|
|
- imageWriter.setOutput(ImageIO.createImageOutputStream(output));
|
|
|
- imageWriter.write(null, new IIOImage(resultImage, null, null), jpegParams);
|
|
|
- byte[] ret = output.toByteArray();
|
|
|
- return ret;
|
|
|
- } catch (Exception e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
- } finally {
|
|
|
- try {
|
|
|
- if (output != null) {
|
|
|
- output.close();
|
|
|
- }
|
|
|
- } catch (IOException e) {
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ public static ImageSize getSize(byte[] iamge) {
|
|
|
+ InputStream is = null;
|
|
|
+ try {
|
|
|
+ byte[] bytes = Arrays.copyOf(iamge, iamge.length);
|
|
|
+ is = new ByteArrayInputStream(bytes);
|
|
|
+ BufferedImage image = ImageIO.read(is);
|
|
|
+ int width = image.getWidth();
|
|
|
+ int height = image.getHeight();
|
|
|
+ return new ImageSize(width, height);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ } finally {
|
|
|
+ if (is != null) {
|
|
|
+ try {
|
|
|
+ is.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|