java.awt.Graphics2D 图片缩放

关键字:java image  thumbnail  google

粗略demo:

import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import org.junit.Test;

public class ImageUtils {

    @Test
    public void test1() throws IOException {
        File file = new File("E:\\1.png");

        ImageUtils.scale(file, 0.1, new File("E:\\2.jpg"));
        ImageUtils.thumbnail(file, 100, new File("E:\\3.jpg"));
    }

    /**
     * 按比例缩放
     *
     * @param rawImage
     * @param ratio
     * @param saltImage
     *
     * @throws IOException
     * */
    public static void scale(File rawImage, double ratio, File saltImage) throws IOException {
        BufferedImage rawBufferedImage = ImageIO.read(rawImage);
        int width = (int) (rawBufferedImage.getWidth() * ratio);
        int height = (int) (rawBufferedImage.getHeight() * ratio);
        BufferedImage bi = getCompatibleImage(width, height);
        Graphics2D g2d = bi.createGraphics();
        double xScale = (double) width / rawBufferedImage.getWidth();
        double yScale = (double) height / rawBufferedImage.getHeight();
        AffineTransform at = AffineTransform.getScaleInstance(xScale, yScale);
        g2d.drawRenderedImage(rawBufferedImage, at);
        g2d.dispose();
        ImageIO.write(bi, "jpg", saltImage);
    }

    /**
     * 按比例缩放至【最大边 = 指定pix】
     *
     * @param rawImage
     * @param pixel
     * @param saltImage
     *
     * @throws IOException
     * */
    public static void thumbnail(File rawImage, int pixel, File saltImage) throws IOException {
        BufferedImage source = ImageIO.read(rawImage);
        int width = source.getWidth();
        int height = source.getHeight();

        int l = width > height ? width : height;

        double ratio = (pixel * 1.0) / l;

        int w = (int) (width * ratio);
        int h = (int) (height * ratio);

        BufferedImage bi = getCompatibleImage(w, h);
        Graphics2D g2d = bi.createGraphics();
        double xScale = (double) w / width;
        double yScale = (double) h / height;
        AffineTransform at = AffineTransform.getScaleInstance(xScale, yScale);
        g2d.drawRenderedImage(source, at);
        g2d.dispose();
        ImageIO.write(bi, "jpg", saltImage);
    }

    private static BufferedImage getCompatibleImage(int w, int h) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice gd = ge.getDefaultScreenDevice();
        GraphicsConfiguration gc = gd.getDefaultConfiguration();
        BufferedImage image = gc.createCompatibleImage(w, h);
        return image;
    }

}
时间: 2024-10-11 06:44:06

java.awt.Graphics2D 图片缩放的相关文章

java实现的图片缩放 压缩 裁剪工具!找了很久,市面上再也找不到比它缩放效果还好的代码了

原文:java实现的图片缩放 压缩 裁剪工具!找了很久,市面上再也找不到比它缩放效果还好的代码了 源代码下载地址:http://www.zuidaima.com/share/1550463380458496.htm 纯 java 实现的 图片缩放 压缩 裁剪工具!不依赖任何第三方 jar 包 1. 找了很久,市面上再也找不到比它缩放效果还好的代码了 (再不使用任何第三方组件的前提下) 2. 支持缩放 3. 支持剪切 (例如:用户上传头像后剪切成正方形小图) /* * Copyright 2012

java使用Graphics2D图片叠加

/** * 图片覆盖(覆盖图压缩到width*height大小,覆盖到底图上) * * @param baseFilePath 底图 * @param coverFilePath 覆盖图 * @param x 起始x轴 * @param y 起始y轴 * @param width 覆盖宽度 * @param height 覆盖长度度 * @return * @throws Exception */ public static BufferedImage coverImage(String bas

java图片缩放

package com.rubekid.springmvc.utils; import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.File; import java.io.F

Java实现打印功能-AWT Graphics2D

Java实现打印功能 用java实现打印,java.awt中提供了一些打印的API,要实现打印,首先要获得打印对象,然后继承Printable实现接口方法print,以便打印机进行打印,最后用用Graphics2D直接输出直接输出.下面代码实现了简单的打印功能: import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.G

JavaSE基础 awt Graphics2D 生成矩形图片并向其中画一条直线

礼悟:    好好学习合思考,尊师重道存感恩.叶见寻根三返一,江河湖海同一体.          虚怀若谷良心主,愿行无悔给最苦.读书锻炼强身心,诚劝且行且珍惜. os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) 代码 package com.jizuiku; import java.awt.BasicStroke; import java.awt.Color; import j

图片处理类(图片水印 图片缩放)

本图片处理类功能非常之强大可以实现几乎所有WEB开发中对图像的处理功能都集成了,包括有缩放图像.切割图像.图像类型转换.彩色转黑白.文字水印.图片水印等功能 1 import java.awt.AlphaComposite; 2 import java.awt.Color; 3 import java.awt.Font; 4 import java.awt.Graphics; 5 import java.awt.Graphics2D; 6 import java.awt.Image; 7 imp

openseadragon.js与deep zoom java实现艺术品图片展示

openseadragon.js 是一款用来做图像缩放的插件,它可以用来做图片展示,做展示的插件很多,也很优秀,但大多数都解决不了图片尺寸过大的问题. 艺术品图像展示就是最简单的例子,展示此类图片一般要求比较精细,所以图片尺寸很大,如果按照普通的方式直接将整个图片加载,要耗费巨大的带宽. openseadragon.js 即为此而生,它展示的图像,必须经过切割处理,当放大图像时,才去加载更大的尺寸,真正做到了按需加载. 值得一提的是,openseadragon.js是微软公司的一款开源产品,非常

java实现验证码图片

1 package sip.utils; 2 import java.awt.Color; 3 import java.awt.Graphics2D; 4 import java.awt.geom.AffineTransform; 5 import java.util.Random; 6 7 /** 8 * 验证码图片生成器 9 * 10 * @author WuZhengFei 11 * 12 */ 13 public class IdentityCode { 14 /** 15 * 验证码图

java中注册图片验证码

package org.servlet.demo; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.nio.charset.Charset; import java.util.Random; im