import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.List;
public class ResizedImageOpenPolitics {
public static void main(String[] args) {
//TODO 图片源头在哪个文件夹下
String inputFolderPath = "F:/shareInIpad";
//TODO 生成文件的路径及名称
String outputFilePath = "F:/result.jpg";
//TODO 底色图片路径
String baseImageFilePath = "F:/shareInIpad/4321.PNG";
float alpha = 0.5f;
try {
List<File> imageFiles = getUniqueImageFiles(inputFolderPath);
int imageSize = (int) Math.ceil(Math.sqrt(imageFiles.size()));
int collageSize = imageSize * 100; // Each image is assumed to be 100x100 pixels
// 创建一个新的BufferedImage对象,用于拼接图片
BufferedImage collage = new BufferedImage(collageSize, collageSize, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = collage.createGraphics();
// 遍历图片并按比例缩小后拼接
int x = 0, y = 0;
for (File imageFile : imageFiles) {
BufferedImage originalImage = ImageIO.read(imageFile);
BufferedImage resizedImage = resizeImage(originalImage, 100, 100);
g.drawImage(resizedImage, x * 100, y * 100, null);
x++;
if (x >= imageSize) {
x = 0;
y++;
}
}
g.dispose();
// 添加指定的图片
String overlayImagePath = baseImageFilePath; // 指定图片的路径
BufferedImage overlayImage = ImageIO.read(new File(overlayImagePath));
// 确保overlayImage的尺寸足够大,可以覆盖collage
int collageWidth = collage.getWidth();
int collageHeight = collage.getHeight();
if (overlayImage.getWidth() < collageWidth || overlayImage.getHeight() < collageHeight) {
// 如果overlayImage尺寸小于collage,需要调整尺寸
BufferedImage resizedOverlayImage = new BufferedImage(collageWidth, collageHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = resizedOverlayImage.createGraphics();
//TODO
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f)); // 设置透明度为70%
//TODO
g2d.drawImage(overlayImage, 0, 0, collageWidth, collageHeight,null);
// g2d.drawImage(resizedOverlayImage, 0, 0, null);
g2d.dispose();
overlayImage = resizedOverlayImage;
}
// 绘制overlayImage到collage上
Graphics2D g2d = collage.createGraphics();
//TODO 设置底照透明度
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f)); // 设置透明度为70%
g2d.drawImage(overlayImage, 0, 0, null);
g2d.dispose();
// 保存最终的图片
ImageIO.write(collage, "png", new File(outputFilePath));
System.out.println("Collage with overlay generated successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
private static List<File> getUniqueImageFiles(String folderPath) {
Set<String> hashSet = new HashSet<>();
List<File> uniqueImageFiles = new ArrayList<>();
File folder = new File(folderPath);
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
//TODO 源头文件类型
if (file.isFile() && file.getName().toLowerCase().endsWith(".png")) {
String hash = getHash(file);
if (!hashSet.contains(hash)) {
hashSet.add(hash);
uniqueImageFiles.add(file);
}
}
}
}
return uniqueImageFiles;
}
private static BufferedImage resizeImage(BufferedImage originalImage, int targetWidth, int targetHeight) {
Image resultingImage = originalImage.getScaledInstance(targetWidth, targetHeight, Image.SCALE_SMOOTH);
BufferedImage outputImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = outputImage.createGraphics();
g2d.drawImage(resultingImage, 0, 0, null);
g2d.dispose();
return outputImage;
}
private static String getHash(File file) {
try {
BufferedImage image = ImageIO.read(file);
if (image != null) {
int[] pixels = image.getRGB(0, 0, image.getWidth(), image.getHeight(), null, 0, image.getWidth());
return Arrays.hashCode(pixels) + "";
}
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
private static BufferedImage createFadedOverlayImage(BufferedImage overlayImage, float alpha) {
int width = overlayImage.getWidth();
int height = overlayImage.getHeight();
BufferedImage fadedOverlayImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = fadedOverlayImage.createGraphics();
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
g2d.drawImage(overlayImage, 0, 0, null);
g2d.dispose();
return fadedOverlayImage;
}
}
java-多图片拼接并增加底色照片
最新推荐文章于 2024-07-25 01:20:49 发布