`

Java改变图片的大小

 
阅读更多
前面在做项目的时候,有一个需求是需要上传图片的,然而该图片只是简单的展示一些信息,不需要很大,所以在上传图片的时候改变图片的大小就显得很有必要了!然后就写了下面这个方法来改变图片的大小!

/**  
 * 改变图片的大小到宽为size,然后高随着宽等比例变化  
 * @param is 上传的图片的输入流  
 * @param os 改变了图片的大小后,把图片的流输出到目标OutputStream  
 * @param size 新图片的宽  
 * @param format 新图片的格式  
 * @throws IOException  
 */  
public static void resizeImage(InputStream is, OutputStream os, int size, String format) throws IOException {   
    BufferedImage prevImage = ImageIO.read(is);   
    double width = prevImage.getWidth();   
    double height = prevImage.getHeight();   
    double percent = size/width;   
    int newWidth = (int)(width * percent);   
    int newHeight = (int)(height * percent);   
    BufferedImage image = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_BGR);   
    Graphics graphics = image.createGraphics();   
    graphics.drawImage(prevImage, 0, 0, newWidth, newHeight, null);   
    ImageIO.write(image, format, os);   
    os.flush();   
    is.close();   
    os.close();   
}  


下面再提供一种方式:


package graphicsTest;   
  
import java.awt.Image;   
import java.awt.image.BufferedImage;   
import java.io.File;   
import java.io.FileOutputStream;   
  
import javax.imageio.ImageIO;   
  
import com.sun.image.codec.jpeg.JPEGCodec;   
import com.sun.image.codec.jpeg.JPEGImageEncoder;   
  
public class GraphicsTest1 {   
  
    // 图片宽和高的最大尺寸   
    public static final int IMAGEMAXBIG = 2000;   
    // 图片宽和高的最小尺寸   
    public static final int IMAGEMINBIG = 10;   
    // 按原图大小生成新图   
    public static final int CREATENEWIMAGETYPE_0 = 0;   
    // 按指定的大小生成新图   
    public static final int CREATENEWIMAGETYPE_1 = 1;   
    // 按原图宽高比例生成新图-按指定的宽度   
    public static final int CREATENEWIMAGETYPE_2 = 2;   
    // 按原图宽高比例生成新图-按指定的高度   
    public static final int CREATENEWIMAGETYPE_3 = 3;   
    // 按原图宽高比例生成新图-按指定的宽和高中较大的尺寸   
    public static final int CREATENEWIMAGETYPE_4 = 4;   
    // 按原图宽高比例生成新图-按指定的宽和高中较小的尺寸   
    public static final int CREATENEWIMAGETYPE_5 = 5;   
  
    /**  
     *   
     * @param _file  
     *            原图片  
     * @param createType  
     *            处理类型  
     * @param newW  
     *            新宽度  
     * @param newH  
     *            新高度  
     * @return  
     * @throws Exception  
     */  
    public static String createNewImage(File _file, int createType, int newW,   
            int newH) throws Exception {   
        if (_file == null)   
            return null;   
        String fileName = _file.getPath();   
        if (fileName == null || "".equals(fileName)   
                || fileName.lastIndexOf(".") == -1)   
            return null;   
        String newFileName = "_NEW";   
        /*  
         * else newFileName = "_" + newFileName;  
         */  
  
        String outFileName = fileName.substring(0, fileName.lastIndexOf("."))   
                + newFileName   
                + fileName.substring(fileName.lastIndexOf("."), fileName   
                        .length());   
        String fileExtName = fileName.substring(   
                (fileName.lastIndexOf(".") + 1), fileName.length());   
        if (newW < IMAGEMINBIG)   
            newW = IMAGEMINBIG;   
        else if (newW > IMAGEMAXBIG)   
            newW = IMAGEMAXBIG;   
  
        if (newH < IMAGEMINBIG)   
            newH = IMAGEMINBIG;   
        else if (newH > IMAGEMAXBIG)   
            newH = IMAGEMAXBIG;   
  
        // 得到原图信息   
        if (!_file.exists() || !_file.isAbsolute() || !_file.isFile()   
                || !checkImageFile(fileExtName))   
            return null;   
        if ((new File(outFileName)).exists()) {   
            System.out.println("file [" + outFileName + "] already exists");   
            throw new Exception();   
        }   
        Image src = ImageIO.read(_file);   
        int w = src.getWidth(null);   
        int h = src.getHeight(null);   
  
        // 确定目标图片的大小   
        int nw = w;   
        int nh = h;   
        if (createType == CREATENEWIMAGETYPE_0)   
            ;   
        else if (createType == CREATENEWIMAGETYPE_1) {   
            nw = newW;   
            nh = newH;   
        } else if (createType == CREATENEWIMAGETYPE_2) {   
            nw = newW;   
            nh = (int) ((double) h / (double) w * nw);   
        } else if (createType == CREATENEWIMAGETYPE_3) {   
            nh = newH;   
            nw = (int) ((double) w / (double) h * nh);   
        } else if (createType == CREATENEWIMAGETYPE_4) {   
            if ((double) w / (double) h >= (double) newW / (double) newH) {   
                nh = newH;   
                nw = (int) ((double) w / (double) h * nh);   
            } else {   
                nw = newW;   
                nh = (int) ((double) h / (double) w * nw);   
            }   
        } else if (createType == CREATENEWIMAGETYPE_5) {   
            if ((double) w / (double) h <= (double) newW / (double) newH) {   
                nh = newH;   
                nw = (int) ((double) w / (double) h * nh);   
            } else {   
                nw = newW;   
                nh = (int) ((double) h / (double) w * nw);   
            }   
        }   
  
        // 构造目标图片   
        BufferedImage tag = new BufferedImage(nw, nh,   
                BufferedImage.TYPE_INT_RGB);   
  
        // 得到目标图片输出流   
        FileOutputStream out = new FileOutputStream(outFileName);   
  
        // 根据需求画出目标图片 方式1   
        tag.getGraphics().drawImage(src, 0, 0, nw, nh, null);   
  
        // 将画好的目标图输出到输出流 方式1   
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);   
        encoder.encode(tag);   
        out.close();   
        return outFileName;   
    }   
  
    public static boolean checkImageFile(String extName) {   
  
        if ("jpg".equalsIgnoreCase(extName))   
            return true;   
        if ("gif".equalsIgnoreCase(extName))   
            return true;   
        if ("bmp".equalsIgnoreCase(extName))   
            return true;   
        if ("jpeg".equalsIgnoreCase(extName))   
            return true;   
        if ("png".equalsIgnoreCase(extName))   
            return true;   
        return false;   
    }   
  
}  

分享到:
评论

相关推荐

    图片压缩,不改变宽高

    使用两中方法进行压缩,可以只改变图片大小,如,原图片100kb,压缩后变成40kb。并且不改变宽高。 一.使用ImageMagick进行压缩类-Aa.java 需要做以下配置: 1.将jmagick.dll加入jdk\bin目录中 2.将jmagick.dll加入到...

    java 图片水印 改变图片大小

    在Java编程领域,图片处理是一项常见的任务,包括添加水印、改变图片大小等。这里我们将深入探讨这些知识点,以及如何在Struts2框架下实现它们。 首先,让我们了解"图片水印"。水印通常用于保护版权或者为图片增加...

    Java提取EXCEL图片重命名并改变像素大小

    本项目专注于一个特定的需求,即“Java提取EXCEL图片重命名并改变像素大小”。这个功能对于那些需要批量处理Excel文件中的图像,比如统一调整格式、优化存储大小或适应不同展示环境的场景非常有用。下面我们将详细...

    java对图片改变大小,png防止变黑,加圆角 圆角外透明

    总的来说,Java提供了丰富的图像处理功能,通过合理的组合和运用,我们可以实现各种复杂的图像处理任务,包括改变图片大小、保持PNG透明度以及添加圆角等效果。在实际开发中,还需要注意性能优化,特别是在处理大量...

    java中图片的大小改变

    在不牺牲质量的前提下改变图片的分辨率是一项技术性较强的工作,涉及到图像处理的基本原理和Java中的相关API。本篇将详细介绍如何在Java中实现这个功能。 首先,Java提供了丰富的图形处理库,主要集中在`java.awt`...

    java 水印(水印适应图片大小,但个别图片太小不支持)

    本知识点主要探讨如何在Java中实现自适应图片大小的水印功能,以及遇到图片过小时的处理策略。 首先,我们需要理解水印的基本概念。水印是在图像或文档上添加的一种视觉标记,它可以是文字、图像或者图形,用于表明...

    可以任意改变图片大小的java程序

    应用此程序可以对图片实现缩放,使其大小任意改变。在网上报名考试中,很多时候要用到个人免冠正面照,并要求有标准尺寸,已经安装java的朋友就不需要使用photoshop这么复杂的工具了,直接使用此程序处理图片即可!

    JAVA实现的图片大小随意拉动调整

    本示例中的"JAVA实现的图片大小随意拉动调整"着重讲解了如何利用Swing来实现图片的动态缩放功能,让用户可以自由调整图片的大小。这个功能在很多应用中都非常实用,比如图像查看器、编辑器或者任何需要展示可调整...

    java图片压缩文件大小图片大小(支持gif动态图)

    这个主题主要涉及如何利用Java来减少图片文件的大小,包括静态图片(如JPEG、PNG)以及动态图片(如GIF)。下面我们将深入探讨相关的知识点。 首先,Java中的核心库`javax.imageio`提供了对图片读取、写入和处理的...

    java处理裁剪图片(更改图片大小)

    例如,要改变图片尺寸,可以创建一个`ConvertOp`对象,设置其尺寸参数,然后执行转换操作。这使得开发人员无需深入了解图像处理的细节,就能完成复杂的操作。 接下来,我们将探讨Java自带的图像处理类。Java提供了`...

    java图片压缩处理(可以压缩为任意大小

    本主题将深入探讨如何使用Java实现图片压缩,并能够将其调整到任意大小,同时保持图片质量并避免变形。 首先,我们需要理解图片压缩的基本原理。图片压缩主要有两种类型:有损压缩和无损压缩。有损压缩会牺牲一部分...

    java图片处理

    文件内含java 处理图片大小等比例缩放,指定颜色改变颜色。根据不同图片设置阴影图片。

    J2ME 改变图片大小函数

    直接吧函数写在图片方法里,调用填写写大小参数就可以了。

    Java提取EXCEL图片重命名并改变像素大小jar包

    Java提取EXCEL图片重命名并改变像素大小jar包,

    java代码保存宽高不变压缩图片(失真不大).docx

    在Java中,压缩图片通常是为了减小文件大小,便于存储或传输,而同时尽可能保持图片质量。上述代码提供了一个名为`CompressPicTools`的类,专门用于压缩图片,保持图片原有的宽高比,同时控制压缩后的失真程度。下面...

    图片缩放、压缩技术java实现

    等比缩放是指在改变图片尺寸时,保持其长宽比不变,防止图片变形。在Java中,我们可以利用`java.awt.Image`类和`java.awt.Graphics2D`类来实现这一功能。`Image`类提供了多种方法来处理图像,而`Graphics2D`则允许...

    可以实现改变图片的大小

    当我们改变图片大小时,实际上是在调整这些像素的数量。有两种常见的方法:缩小图片是减少像素数量,放大则是插入新的像素。在BMP格式中,由于每个像素都有独立的颜色信息,调整尺寸可能导致图像质量的损失,尤其是...

    j2me中改变图片大小

    总结一下,J2ME中改变图片大小主要依赖于`javax.microedition.lcdui.Graphics` 类的`drawImage()`方法。通过适当的比例参数,我们可以实现图像的缩放。然而,为了优化性能和内存使用,我们还需要考虑图像的加载、...

    多张图片转pdf,图片大小适应页面

    4. 调整图片大小:为了使图片自适应PDF页面,可以使用`image.scaleToFit()`方法调整图片的大小,确保它不会超出页面范围。 ```java image.scaleToFit(document.getPageSize().getWidth(), document.getPageSize()....

    java更改图片大小示例分享

    总结来说,这个Java示例提供了一种简单的方法来改变图片的大小,通过读取图片、创建缩放后的BufferedImage、编码和写入新图像,实现了图片的缩放功能。注意,这个示例使用了Sun的私有JPEGCodec类,这可能在某些Java...

Global site tag (gtag.js) - Google Analytics