Add File
This commit is contained in:
113
src/main/java/org/dromara/easyai/tools/ImageTools.java
Normal file
113
src/main/java/org/dromara/easyai/tools/ImageTools.java
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
package org.dromara.easyai.tools;
|
||||||
|
|
||||||
|
import org.dromara.easyai.matrixTools.Matrix;
|
||||||
|
import org.dromara.easyai.entity.ThreeChannelMatrix;
|
||||||
|
import org.dromara.easyai.yolo.OutBox;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.geom.Rectangle2D;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 图片输出工具类
|
||||||
|
*
|
||||||
|
* @author lidapeng
|
||||||
|
*/
|
||||||
|
public class ImageTools {
|
||||||
|
|
||||||
|
public static void writeImage(ThreeChannelMatrix img, String url) {
|
||||||
|
ByteArrayOutputStream b = null;
|
||||||
|
FileOutputStream fileOutputStream = null;
|
||||||
|
try {
|
||||||
|
b = drawImage(img);
|
||||||
|
fileOutputStream = new FileOutputStream(url);
|
||||||
|
b.writeTo(fileOutputStream);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (fileOutputStream != null) {
|
||||||
|
fileOutputStream.close();
|
||||||
|
}
|
||||||
|
if (b != null) {
|
||||||
|
b.close();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void drawBox(String fileURL, List<OutBox> borderFoods, String outFileName, int fontSize) throws Exception {
|
||||||
|
File file = new File(fileURL);
|
||||||
|
BufferedImage image2 = ImageIO.read(file);
|
||||||
|
int width = image2.getWidth();
|
||||||
|
int height = image2.getHeight();
|
||||||
|
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||||
|
Graphics2D g2 = (Graphics2D) bi.getGraphics();
|
||||||
|
g2.drawImage(image2, 0, 0, width, height, null);
|
||||||
|
g2.setFont(new Font(null, Font.BOLD, fontSize));
|
||||||
|
for (OutBox borderFood : borderFoods) {//输出
|
||||||
|
Rectangle2D rect = new Rectangle2D.Float(borderFood.getX(), borderFood.getY(), borderFood.getWidth(), borderFood.getHeight());//声明并创建矩形对象,矩形的左上角是(20,30),宽是300,高是40
|
||||||
|
g2.setColor(Color.RED);
|
||||||
|
g2.draw(rect);
|
||||||
|
g2.setColor(Color.BLUE);
|
||||||
|
g2.drawString(borderFood.getTypeID(), borderFood.getX() + 10, borderFood.getY() + 10);
|
||||||
|
}
|
||||||
|
ImageIO.write(bi, "jpg", new FileOutputStream(outFileName));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ByteArrayOutputStream drawImage(ThreeChannelMatrix img) throws Exception {
|
||||||
|
final BufferedImage bufferedImage = getBufferedImage(img);
|
||||||
|
ByteArrayOutputStream ar = new ByteArrayOutputStream();
|
||||||
|
ImageIO.write(bufferedImage, "PNG", ar);
|
||||||
|
return ar;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static File drawImage(ThreeChannelMatrix img, String imageName) throws Exception {
|
||||||
|
final BufferedImage bufferedImage = getBufferedImage(img);
|
||||||
|
File ar = new File(imageName);
|
||||||
|
ImageIO.write(bufferedImage, "PNG", ar);
|
||||||
|
return ar;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static BufferedImage getBufferedImage(ThreeChannelMatrix img) throws Exception {
|
||||||
|
Matrix matrixR = img.getMatrixR();
|
||||||
|
Matrix matrixG = img.getMatrixG();
|
||||||
|
Matrix matrixB = img.getMatrixB();
|
||||||
|
int x = img.getX();
|
||||||
|
int y = img.getY();
|
||||||
|
BufferedImage bi = new BufferedImage(img.getY(), img.getX(), BufferedImage.TYPE_INT_RGB);
|
||||||
|
Graphics2D g2 = (Graphics2D) bi.getGraphics();
|
||||||
|
for (int i = 0; i < x; i++) {
|
||||||
|
for (int j = 0; j < y; j++) {
|
||||||
|
int r = (int) (matrixR.getNumber(i, j) * 255D);
|
||||||
|
int g = (int) (matrixG.getNumber(i, j) * 255D);
|
||||||
|
int b = (int) (matrixB.getNumber(i, j) * 255D);
|
||||||
|
if (r > 255) {
|
||||||
|
r = 255;
|
||||||
|
} else if (r < 0) {
|
||||||
|
r = 0;
|
||||||
|
}
|
||||||
|
if (g > 255) {
|
||||||
|
g = 255;
|
||||||
|
} else if (g < 0) {
|
||||||
|
g = 0;
|
||||||
|
}
|
||||||
|
if (b > 255) {
|
||||||
|
b = 255;
|
||||||
|
} else if (b < 0) {
|
||||||
|
b = 0;
|
||||||
|
}
|
||||||
|
g2.setColor(new Color(r, g, b));
|
||||||
|
g2.drawRect(j, i, 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bi;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user