需求,造成1天每一个小时的画像,并合成一个图片。java
思路:每一个小时抽取一张图片,再把这种图片截取1/24并存放,后面,再把这24张图片合成一张图片。面试
准备一张原图学习
截图前:ui
截图后:(下午14点的截图)code
package com.qihui.qxj.utils; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.*; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; public class ImageUtils { public static void cutJPG(InputStream input, OutputStream out, int x, int y, int width, int height) throws IOException { ImageInputStream imageStream = null; try { Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("jpg"); ImageReader reader = readers.next(); imageStream = ImageIO.createImageInputStream(input); reader.setInput(imageStream, true); ImageReadParam param = reader.getDefaultReadParam(); System.out.println(reader.getWidth(0)); System.out.println(reader.getHeight(0)); Rectangle rect = new Rectangle(x, y, width, height); param.setSourceRegion(rect); BufferedImage bi = reader.read(0, param); ImageIO.write(bi, "jpg", out); } finally { imageStream.close(); } } public static void cutPNG(InputStream input, OutputStream out, int x, int y, int width, int height) throws IOException { ImageInputStream imageStream = null; try { Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("png"); ImageReader reader = readers.next(); imageStream = ImageIO.createImageInputStream(input); reader.setInput(imageStream, true); ImageReadParam param = reader.getDefaultReadParam(); System.out.println(reader.getWidth(0)); System.out.println(reader.getHeight(0)); Rectangle rect = new Rectangle(x, y, width, height); param.setSourceRegion(rect); BufferedImage bi = reader.read(0, param); ImageIO.write(bi, "png", out); } finally { imageStream.close(); } } public static void cutImage(InputStream input, OutputStream out, String type,int x, int y, int width, int height) throws IOException { ImageInputStream imageStream = null; try { String imageType=(null==type||"".equals(type))?"jpg":type; Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName(imageType); ImageReader reader = readers.next(); imageStream = ImageIO.createImageInputStream(input); reader.setInput(imageStream, true); ImageReadParam param = reader.getDefaultReadParam(); Rectangle rect = new Rectangle(x, y, width, height); param.setSourceRegion(rect); BufferedImage bi = reader.read(0, param); ImageIO.write(bi, imageType, out); } finally { imageStream.close(); } } public static void main(String[] args) throws Exception { String imgName = "D:\\test.jpg"; BufferedImage sourceImg = ImageIO.read(new FileInputStream(imgName)); //获取原始图片的宽高 int height = sourceImg.getHeight(); int width = sourceImg.getWidth(); sourceImg.flush(); int x = (width / 24) * (14); int y = 0; ImageUtils.cutJPG(new FileInputStream(imgName), new FileOutputStream("D:\\test123.jpg"), x,y,width/24,height); /* ImageUtils.cutPNG(new FileInputStream("c:\\1.png"), new FileOutputStream("c:\\test3.png"), 0,0,50,40); */ } }
本文章暂时只实现图片的截取,把一张图片切割成24份,取对应小时对应在原图的宽高。如何把24张图片合成一张图片。且看下下文。orm
若是你热衷技术,喜欢交流,欢迎加入咱们!
视频
欢迎关注公众号“程序猿学社”blog
1.免费领取各类学习视频,学习相关java各个技术点面试知识图片
2.有相关学习疑问或者面试困惑,也能够经过公众号私信博主get
3.经过公众号进入java交流群,不闲聊,只谈技术