天天看點

《ffmpeg入門學習》九 java實作圖檔切圖(合成日變化圖) 1.準備

 1.準備

需求,形成1天每個小時的畫像,并合成一個圖檔。

思路:每個小時抽取一張圖檔,再把這種圖檔截取1/24并存放,後面,再把這24張圖檔合成一張圖檔。

準備一張原圖

截圖前:

《ffmpeg入門學習》九 java實作圖檔切圖(合成日變化圖) 1.準備

 截圖後:(下午14點的截圖)

《ffmpeg入門學習》九 java實作圖檔切圖(合成日變化圖) 1.準備
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張圖檔合成一張圖檔。且看下下文。

如果你熱衷技術,喜歡交流,歡迎加入我們!

歡迎關注公衆号“程式猿學社”

       1.免費領取各種學習視訊,學習相關java各個技術點面試知識

       2.有相關學習疑問或者面試困惑,也可以通過公衆号私信部落客

      3.通過公衆号進入java交流群,不閑聊,隻談技術

《ffmpeg入門學習》九 java實作圖檔切圖(合成日變化圖) 1.準備