Java下载图片三. 拼图——像美图秀秀、发微博那样可以拼长图 博客分类: Java JavaImageDownload
程序员文章站
2024-03-21 21:52:10
...
参考代码一:
import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; /** * @author happy * */ public class SpellImg { public static void main(String[] args) { try { // 读取第一张图片 File fileOne = new File("E:\\Test\\5.png"); BufferedImage ImageOne = ImageIO.read(fileOne); int width = ImageOne.getWidth();// 图片宽度 int height = ImageOne.getHeight();// 图片高度 // 从图片中读取RGB int[] ImageArrayOne = new int[width * height]; ImageArrayOne = ImageOne.getRGB(0, 0, width, height, ImageArrayOne, 0, width); // 对第二张图片做相同的处理 File fileTwo = new File("E:\\Test\\6.png"); BufferedImage ImageTwo = ImageIO.read(fileTwo); int[] ImageArrayTwo = new int[width * height]; ImageArrayTwo = ImageTwo.getRGB(0, 0, width, height, ImageArrayTwo, 0, width); // 生成新图片 // BufferedImage ImageNew = new BufferedImage(width * 2, height, // BufferedImage.TYPE_INT_RGB);// (左右) BufferedImage ImageNew = new BufferedImage(width, height * 2, BufferedImage.TYPE_INT_ARGB); // (上下) // TYPE_INT_ARGB(不丢失alpha)TYPE_INT_RGB(丢失alpha) ImageNew.setRGB(0, 0, width, height, ImageArrayOne, 0, width);// 设置左半部分的RGB // ImageNew.setRGB(width, 0, width, height, ImageArrayTwo, 0, // width);// 设置右半部分的RGB(左右) ImageNew.setRGB(0, height, width, height, ImageArrayTwo, 0, width);// 设置右半部分的RGB(上下) File outFile = new File("E:\\Test\\8.png"); ImageIO.write(ImageNew, "png", outFile);// 写图片 System.out.println("success!"); } catch (Exception e) { e.printStackTrace(); } } }
参考代码二:
/** * Java拼接多张图片 * * @param pics * @param type * @param dst_pic * @return */ public static boolean merge(String[] pics, String type, String dst_pic) { int len = pics.length; if (len < 1) { System.out.println("pics len < 1"); return false; } File[] src = new File[len]; BufferedImage[] images = new BufferedImage[len]; int[][] ImageArrays = new int[len][]; for (int i = 0; i < len; i++) { try { src[i] = new File(pics[i]); images[i] = ImageIO.read(src[i]); } catch (Exception e) { e.printStackTrace(); return false; } int width = images[i].getWidth(); int height = images[i].getHeight(); ImageArrays[i] = new int[width * height];// 从图片中读取RGB ImageArrays[i] = images[i].getRGB(0, 0, width, height, ImageArrays[i], 0, width); } int dst_height = 0; int dst_width = images[0].getWidth(); for (int i = 0; i < images.length; i++) { dst_width = dst_width > images[i].getWidth() ? dst_width : images[i].getWidth(); dst_height += images[i].getHeight(); } System.out.println(dst_width); System.out.println(dst_height); if (dst_height < 1) { System.out.println("dst_height < 1"); return false; } // 生成新图片 try { // dst_width = images[0].getWidth(); BufferedImage ImageNew = new BufferedImage(dst_width, dst_height, BufferedImage.TYPE_INT_RGB); int height_i = 0; for (int i = 0; i < images.length; i++) { ImageNew.setRGB(0, height_i, dst_width, images[i].getHeight(), ImageArrays[i], 0, dst_width); height_i += images[i].getHeight(); } File outFile = new File(dst_pic); ImageIO.write(ImageNew, type, outFile);// 写图片 } catch (Exception e) { e.printStackTrace(); return false; } return true; }