zoukankan      html  css  js  c++  java
  • 使用Java合并图片、修改DPI

    项目中有时候需要对图片进行DPI、合并、拼接等的处理:

    package com.snow.web.a_test;
    
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGEncodeParam;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
    
    public class Test {
        
        private static String path = "F:\";
        
        public static void main(String[] args) throws Exception {
            System.out.println("=======================================");
    //        String path = "F:\test.jpg";  
    //      File files = new File(path);  
    //      handleDpi(files, 300, 300); 
    
    //        String path = "F:\";  
            File file1 = new File(path, "1.jpg");  
            File file2 = new File(path, "2.png");  
    //        mosaicImage(file1, file2); 
            mergeImage(file1, file2); 
        }
        /** 
         * 改变图片DPI 
         * 
         * @param file 
         * @param xDensity 
         * @param yDensity 
         * @throws ImageReadException 
         */  
        public static void handleDpi(File file, int xDensity, int yDensity){  
            try {  
                BufferedImage image = ImageIO.read(file);  
                JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(file));  
                JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);  
                jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);  
                jpegEncoder.setJPEGEncodeParam(jpegEncodeParam);  
                jpegEncodeParam.setQuality(0.75f, false);  
                jpegEncodeParam.setXDensity(xDensity);  
                jpegEncodeParam.setYDensity(yDensity);  
                jpegEncoder.encode(image, jpegEncodeParam);  
                image.flush();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        } 
        /**
         * 图片拼接
         * @param file1 左边
         * @param file2    右边
         * @throws IOException
         */
        public static void mosaicImage(File file1, File file2) throws IOException {        
            BufferedImage image1 = ImageIO.read(file1);  
            BufferedImage image2 = ImageIO.read(file2);  
      
            BufferedImage combined = new BufferedImage(image1.getWidth() * 2, image1.getHeight(), BufferedImage.TYPE_INT_RGB);  
      
            // paint both images, preserving the alpha channels  
            Graphics g = combined.getGraphics();  
            g.drawImage(image1, 0, 0, null);  
            g.drawImage(image2, image1.getWidth(), 0, null);  
              
            // Save as new image  
            ImageIO.write(combined, "JPG", new File(path, "3.jpg"));  
        }  
        /**
         * 图片合并
         * @param file1 左边
         * @param file2    右边
         * @throws IOException
         */
        public static void mergeImage(File file1, File file2) throws IOException {        
            BufferedImage image1 = ImageIO.read(file1);  
            BufferedImage image2 = ImageIO.read(file2);  
      
            BufferedImage combined = new BufferedImage(image1.getWidth(), image1.getHeight(), BufferedImage.TYPE_INT_RGB);  
      
            // paint both images, preserving the alpha channels  
            Graphics g = combined.getGraphics();  
            System.out.println(image2.getData());
            g.drawImage(image1, 0, 0, null);  
            g.drawImage(image2, 0, 0, image1.getWidth(), image1.getHeight(), null);  
              
            // Save as new image  
            ImageIO.write(combined, "JPG", new File(path, "4.jpg"));  
        }  
        
    }
  • 相关阅读:
    并行计算的技术路径
    Qt 中文编码问题记录
    rest_rpc 编译安装和测试 ubuntu18.04
    Qt QPorcess 启动外部程序失败的原因之一
    ubuntu 下 cesium的环境搭建
    Qt 渐变色笔记
    Qt编写的自定义控件为什么在QtDesigner中可见,在QtCreator中不可见
    Qt 编译及自动部署 库 工具集(自动复制生成的库及头文件到指定的安装路径)
    Windows10 OSG 编译安装及集成至Qt
    百度图像识别SDK简单使用
  • 原文地址:https://www.cnblogs.com/chen-lhx/p/8547304.html
Copyright © 2011-2022 走看看