java实现微博九宫格图片切分

总看别人微博的九宫格广告,想想,实现倒是很简单,应该说简单到爆了,不过还是手写实现一下吧


主要思想:

1. 一个待绘制的BufferedImage,长宽都是原图的1/3

2. 使用graphics,通过偏移量选择绘制原图的区域

3. 绘制结束就可以输出到文件

4. 通过两层循环,绘制9个位置的全部图片


说完上图

原图



切分后的图片



代码也比较简单,实现起来很!方!便!

		File imgfile;
		Image originimg;
		BufferedImage image;
		Graphics g;
		FileOutputStream out;
		JPEGImageEncoder encoder;

		try {
			// 获取原始图片
			imgfile = new File("input.jpg");
			originimg = ImageIO.read(imgfile);

			// 获取原始图片的宽和高
			int width = originimg.getWidth(null);
			int height = originimg.getHeight(null);

			for (int i = 0; i < 3; i++) {
				for (int j = 0; j < 3; j++) {
					// 九宫格,每张图片大小都为原来的1/3
					image = new BufferedImage(width / 3, height / 3,
							BufferedImage.TYPE_INT_RGB);
					// 创建图片
					g = image.createGraphics();
					// 绘制图片
					g.drawImage(originimg, width * -i / 3, height * -j / 3,
							width, height, null);
					// 图片绘制完成,关闭g
					g.dispose();

					// 输出流和输出文件
					out = new FileOutputStream("output" + i + "-" + j + ".jpg");
					// 下面代码将输出图片转换为JPEG、JPG文件
					encoder = JPEGCodec.createJPEGEncoder(out);
					encoder.encode(image);
					out.close();
					System.out.println("输出文件output" + i + "-" + j + ".jpg");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

打完收工


这里的问题就在于长方形的图片切出来也是长方形的,未必好看,但是直接切成正方形的需要考虑截取哪一部分

以下图为例



原图为长方形的截图效果如下




如果依然希望输出正方型,压缩图片效果不好,所以采用直接截取图片的方式


File imgfile;
		Image originimg;
		BufferedImage image;
		Graphics g;
		FileOutputStream out;
		JPEGImageEncoder encoder;

		try {
			// 获取原始图片
			imgfile = new File("input3.jpg");
			originimg = ImageIO.read(imgfile);

			// 获取原始图片的宽和高
			int width = originimg.getWidth(null);
			int height = originimg.getHeight(null);

			// 如果输入为长方形,重新计算长宽
			int outputwidth = width > height ? height : width;
			int outputheight = outputwidth;

			for (int i = 0; i < 3; i++) {
				for (int j = 0; j < 3; j++) {
					// 九宫格,每张图片大小都为原来的1/3
					// 长方形,新建图片大小为计算后的正方型的1/3
					image = new BufferedImage(outputwidth / 3,
							outputheight / 3, BufferedImage.TYPE_INT_RGB);
					// 创建图片
					g = image.createGraphics();
					// 绘制图片
					// 长方形,计算偏移量的数据采用计算后的正方形
					g.drawImage(originimg, outputwidth * -i / 3, outputheight
							* -j / 3, width, height, null);
					// 图片绘制完成,关闭g
					g.dispose();

					// 输出流和输出文件
					out = new FileOutputStream("output" + i + "-" + j + ".jpg");
					// 下面代码将输出图片转换为JPEG、JPG文件
					encoder = JPEGCodec.createJPEGEncoder(out);
					encoder.encode(image);
					out.close();
					System.out.println("输出文件output" + i + "-" + j + ".jpg");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}


最终截取了正方形的部分,效果如下




展开阅读全文

没有更多推荐了,返回首页