자바 기반 의 간단 한 이미지 처리
먼저 템 플 릿 그림 을 사용 하고 그림 에 그림 이나 문 자 를 추가 해도 됩 니 다.
의존 하 다
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
<optional>true</optional>
</dependency>
3.패 키 징 데이터 류
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.awt.*;
/**
*
* @author tyg
* @date 2021-04-23 14:33
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PositionPO {
/** */
private Object data;
/** X */
private float x;
/** Y */
private float y;
/** */
private float w;
/** */
private float h;
/** */
private Font font;
public PositionPO(Object data, float x, float y, float w, float h) {
this.data = data;
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
public PositionPO(Object data, float x, float y) {
this.data = data;
this.x = x;
this.y = y;
}
public PositionPO(Object data, float x, float y, Font font) {
this.data = data;
this.x = x;
this.y = y;
this.font = font;
}
public PositionPO(float x, float y, float w, float h) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
}
import com.yt.distributor.po.pdf.PositionPO;
import lombok.Data;
import java.util.List;
/**
*
* @author tyg
* @date 2021-04-24 14:52
*/
@Data
public class ImageHandlePO {
/** */
private List<PositionPO> textList;
/** */
private List<PositionPO> imageList;
public ImageHandlePO(List<PositionPO> textList, List<PositionPO> imageList) {
this.textList = textList;
this.imageList = imageList;
}
}
상량 류
package com.yt.distributor.constant;
import org.springframework.core.io.ClassPathResource;
import java.awt.*;
import java.io.File;
import java.io.IOException;
/**
*
* @author tyg
* @date 2021-04-24 16:59
*/
public class ImageConstant {
/** */
public static final float PELLUCIDITY = 1.0F;
/** */
public static final Font FONT = new Font(" ", Font.BOLD, 18);
/** */
public static File POSTER_SOURCE_FILE;
/** */
public static final String FORMAT = "png";
static{
try {
ClassPathResource resource = new ClassPathResource("conf/poster.jpg");
POSTER_SOURCE_FILE = resource.getFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5.이미지 처리 클래스
import com.yt.distributor.constant.ImageConstant;
import com.yt.distributor.po.img.ImageHandlePO;
import com.yt.distributor.po.pdf.PositionPO;
import lombok.extern.log4j.Log4j2;
import net.dreamlu.mica.core.utils.$;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
/**
*
* : : ,
* @author tyg
* @date 2021-04-24 17:45
*/
@Log4j2
public class PictureSynthesis {
/** */
public static final Object FLAG = true;
/** */
public static File sourceFile;
public static void main(String[] args) throws IOException {
//
BufferedImage image = QrCodeGenerator.generateQrCode("http://www.baiud.com/index.html?id=13", 192, 192);
//
List<PositionPO> imageList = new ArrayList<>();
imageList.add(new PositionPO(ImageIO.read(new URL("https://thirdwx.qlogo.cn/mmopen/vi_32/AtTHbmrMict69vB7ocDMbstibgvwxpK51bOoNkQiaemrImnicUK2L9OoF1JibHiceLwY53ibiaicJQibuEwLNFicJiaYcQHRiaw/132")), 120F, 1688F, 192F, 192F));
imageList.add(new PositionPO(image, 785F, 1632F, 192F , 192F));
//
Font font = new Font(" ", Font.PLAIN, 30);
List<PositionPO> textList = new ArrayList<>();
textList.add(new PositionPO(" ", 120F, 1660F, font));
textList.add(new PositionPO(" ", 336F, 1758F, font));
textList.add(new PositionPO(" 。", 336F, 1796F, font));
textList.add(new PositionPO(" ", 760F, 1880F, font));
String sourcePath = "C:\\Users\\Administrator\\Desktop\\poster.jpg";
String savePath = "C:\\Users\\Administrator\\Desktop\\poster-handle.jpg";
//
handleImage(new ImageHandlePO(textList, imageList), new File(sourcePath), savePath);
}
/**
* ( )
* @param po
* @author tyg
* @date 2021-04-14 15:45
* @return InputStream
*/
public static InputStream handleImage(ImageHandlePO po, File sourceFile) throws IOException {
synchronized (FLAG) {
PictureSynthesis.sourceFile = sourceFile;
// ,
BufferedImage image = watermark(po);
return getInputStream(image);
}
}
/**
* ( )
* @param po
* @param saveFilePath
* @author tyg
* @date 2017 9 6 12:53:11
*/
public static void handleImage(ImageHandlePO po, File sourceFile, String saveFilePath) throws IOException {
synchronized (FLAG) {
PictureSynthesis.sourceFile = sourceFile;
//
BufferedImage buffImg = watermark(po);
//
generateWaterFile(buffImg, saveFilePath);
}
}
/**
*
* :
* @param po
* @throws IOException io
* @return BufferedImage java.awt.image.BufferedImage
*/
private static BufferedImage watermark(ImageHandlePO po) throws IOException {
//
BufferedImage buffImg = ImageIO.read(sourceFile);
// Graphics2D ,
Graphics2D g2d = buffImg.createGraphics();
//
if ($.isNotEmpty(po.getTextList())){
for (PositionPO pp : po.getTextList()){
g2d.setColor(Color.black);
g2d.setFont( pp.getFont() == null ? ImageConstant.FONT : pp.getFont());
g2d.drawString(pp.getData().toString(), pp.getX(), pp.getY());
}
}
//
if ($.isNotEmpty(po.getImageList())){
for (PositionPO pp : po.getImageList()){
BufferedImage image = (BufferedImage) pp.getData();
//
int width = pp.getW() <= 0 ? image.getWidth() : (int) pp.getW();
//
int height = pp.getH() <= 0 ? image.getHeight() : (int) pp.getH();
//
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, ImageConstant.PELLUCIDITY));
//
g2d.drawImage(image, (int)pp.getX(), (int)pp.getY(), width, height, null);
}
}
//
g2d.dispose();
return buffImg;
}
/**
*
* @param buffImg BufferedImage
* @param savePath
* @author tyg
* @date 2021-04-24 16:19
*/
private static void generateWaterFile(BufferedImage buffImg, String savePath) {
int temp = savePath.lastIndexOf(".") + 1;
try {
ImageIO.write(buffImg, savePath.substring(temp), new File(savePath));
} catch (IOException e1) {
e1.printStackTrace();
}
}
/**
*
* @author tyg
* @date 2021-04-24 16:19
*/
private static void getFonts(){
String[] fontNames=GraphicsEnvironment.getLocalGraphicsEnvironment().
getAvailableFontFamilyNames();
for(String fontName:fontNames){
System.out.println(fontName);
}
}
/**
*
* @param image
* @author tyg
* @date 2021-04-14 17:14
* @return java.io.InputStream
*/
public static InputStream getInputStream(BufferedImage image){
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
ImageIO.write(image, ImageConstant.FORMAT, os);
return new ByteArrayInputStream(os.toByteArray());
} catch (IOException e) {
log.error(" :",e);
}
return null;
}
}
효과 도이상 의 데 이 터 는 모두 그림 의 1080*1920 픽 셀 에 따라 설정 되 고 아래 의 빨 간 상자 부분 은 동적 으로 생 성 됩 니 다.
자바 기반 의 간단 한 이미지 처리 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 이미지 처리 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.