`

缩放图像

阅读更多

方案一:

import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.Graphics;
import java.awt.color.ColorSpace;
import javax.imageio.ImageIO;

public class ChangeImageSize
{
    /** *//**
     * 缩放图像
     * @param srcImageFile 源图像文件地址
     * @param result       缩放后的图像地址
     * @param scale        缩放比例
     * @param flag         缩放选择:true 放大; false 缩小;
     */
    public static void scale(String srcImageFile, String result, int scale, boolean flag)
    {
        try
        {
            BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
            int width = src.getWidth(); // 得到源图宽
            int height = src.getHeight(); // 得到源图长
            if (flag)
            {
                // 放大
                width = width * scale;
                height = height * scale;
            }
            else
            {
                // 缩小
                width = width / scale;
                height = height / scale;
            }
            Image image = src.getScaledInstance(width, height, Image.SCALE_DEFAULT);
            BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics g = tag.getGraphics();
            g.drawImage(image, 0, 0, null); // 绘制缩小后的图
            g.dispose();
            ImageIO.write(tag, "JPEG", new File(result));// 输出到文件流
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
 

方案二:

package com.common.helper;   
  
import java.io.*;   
import java.util.*;   
import com.sun.image.codec.jpeg.*;   
import java.awt.image.*;   
import java.awt.*;   
import java.net.*;   
import java.applet.*;   
import java.sql.*;   
//缩略图类,   
//本java类能将jpg图片文件,进行等比或非等比的大小转换。   
//具体使用方法   
//s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))   
public class DwindlePic {   
  
    String InputDir; //输入图路径   
    String OutputDir; //输出图路径   
    String InputFileName; //输入图文件名   
    String OutputFileName; //输出图文件名   
    int OutputWidth = 80; //默认输出图片宽   
    int OutputHeight = 80; //默认输出图片高   
    int rate = 0;   
    boolean proportion = true; //是否等比缩放标记(默认为等比缩放)   
  
    public DwindlePic() {   
        //初始化变量   
        InputDir = "";   
        OutputDir = "";   
        InputFileName = "";   
        OutputFileName = "";   
        OutputWidth = 80;   
        OutputHeight = 80;   
        rate = 0;   
    }   
  
    public boolean s_pic() {   
//        BufferedImage image;   
//        String NewFileName;   
//建立输出文件对象   
        File file = new File(OutputDir + OutputFileName);   
        FileOutputStream tempout = null;   
        try {   
            tempout = new FileOutputStream(file);   
        } catch (Exception ex) {   
            System.out.println(ex.toString());   
        }   
        Image img = null;   
        Toolkit tk = Toolkit.getDefaultToolkit();   
        Applet app = new Applet();   
        MediaTracker mt = new MediaTracker(app);   
        try {   
            img = tk.getImage(InputDir + InputFileName);   
            mt.addImage(img, 0);   
            mt.waitForID(0);   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
  
        if (img.getWidth(null) == -1) {   
//            System.out.println(" can't read,retry!" + "<BR>");   
            return false;   
        } else {   
            int new_w;   
            int new_h;   
            if (this.proportion == true) { //判断是否是等比缩放.   
//为等比缩放计算输出的图片宽度及高度   
                double rate1 = ((double) img.getWidth(null)) / (double) OutputWidth +   
                        0.1;   
                double rate2 = ((double) img.getHeight(null)) / (double) OutputHeight +   
                        0.1;   
                double rate = rate1 > rate2 ? rate1 : rate2;   
                new_w = (int) (((double) img.getWidth(null)) / rate);   
                new_h = (int) (((double) img.getHeight(null)) / rate);   
            } else {   
                new_w = OutputWidth; //输出的图片宽度   
                new_h = OutputHeight; //输出的图片高度   
            }   
            BufferedImage buffImg = new BufferedImage(new_w, new_h,   
                    BufferedImage.TYPE_INT_RGB);   
  
            Graphics g = buffImg.createGraphics();   
  
            g.setColor(Color.white);   
            g.fillRect(0, 0, new_w, new_h);   
  
            g.drawImage(img, 0, 0, new_w, new_h, null);   
            g.dispose();   
  
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);   
            try {   
                encoder.encode(buffImg);   
                tempout.close();   
            } catch (IOException ex) {   
                System.out.println(ex.toString());   
            }   
        }   
        return true;   
    }   
  
    public boolean s_pic(String InputDir, String OutputDir, String InputFileName,   
            String OutputFileName) {   
//输入图路径   
        this.InputDir = InputDir;   
//输出图路径   
        this.OutputDir = OutputDir;   
//输入图文件名   
        this.InputFileName = InputFileName;   
//输出图文件名   
        this.OutputFileName = OutputFileName;   
        return s_pic();   
    }   
  
    public boolean s_pic(String InputDir, String OutputDir, String InputFileName,   
            String OutputFileName, int width, int height, boolean gp) {   
//输入图路径   
        this.InputDir = InputDir;   
//输出图路径   
        this.OutputDir = OutputDir;   
//输入图文件名   
        this.InputFileName = InputFileName;   
//输出图文件名   
        this.OutputFileName = OutputFileName;   
//设置图片长宽   
        setW_H(width, height);   
//是否是等比缩放 标记   
        this.proportion = gp;   
        return s_pic();   
    }   
  
    public void setInputDir(String InputDir) {   
        this.InputDir = InputDir;   
    }   
  
    public void setOutputDir(String OutputDir) {   
        this.OutputDir = OutputDir;   
    }   
  
    public void setInputFileName(String InputFileName) {   
        this.InputFileName = InputFileName;   
    }   
  
    public void setOutputFileName(String OutputFileName) {   
        this.OutputFileName = OutputFileName;   
    }   
  
    public void setOutputWidth(int OutputWidth) {   
        this.OutputWidth = OutputWidth;   
    }   
  
    public void setOutputHeight(int OutputHeight) {   
        this.OutputHeight = OutputHeight;   
    }   
  
    public void setW_H(int width, int height) {   
        this.OutputWidth = width;   
        this.OutputHeight = height;   
    }   
  
    public static void main(String[] a) {   
        //s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度)   
        DwindlePic mypic = new DwindlePic();   
        System.out.println(   
                mypic.s_pic("c:/",   
                "d:/",   
                "aa.bmp", "wwww.jpg", 120, 80, true));   
    }   
}  
分享到:
评论

相关推荐

    PB按比例缩放图片.rar_PB 缩放图片_PB图片框缩放_feet4lg_pb 图片_pb 自适应

    标题中的“PB按比例缩放图片.rar”表明这是一个关于PowerBuilder(简称PB)的应用示例,主要用于图片的按比例缩放。在编程中,尤其是在GUI应用程序开发中,图像的缩放是一个常见的需求,用于适应不同的屏幕尺寸或者...

    MFC GDI+缩放图片示例

    请注意,缩放图像可能涉及到一些性能问题,尤其是当处理大图时。因此,你可能需要考虑缓存缩放后的图像,或者使用更高效的缩放算法,如双线性插值。 在应用结束时,别忘了清理GDI+: ```cpp void CMyView::...

    多点触控缩放图片

    本文将深入探讨如何处理多点触控缩放图像时遇到的问题,如图像缩小后反弹导致的变形,以及缩放功能与onClick、onLongClick事件之间的冲突。 首先,我们要理解Android中的多点触控机制。Android系统提供了`...

    纯Qt实现图像的读取、鼠标位置缩放图像、移动图像

    2. **鼠标位置缩放图像**: 在Qt中,QGraphicsView提供了缩放功能。我们需要创建一个QGraphicsView,并将QGraphicsScene设置为其视图。然后,可以通过设置缩放因子来实现图像的放大和缩小。当鼠标按下并移动时,...

    易语言缩放图片源码(指定宽度高度)

    标题提到的"易语言缩放图片源码(指定宽度高度)"是关于使用易语言来调整图像尺寸的代码实现,这在很多应用场景中都非常实用,如网页设计、图形用户界面(GUI)开发等。 易语言中的图像处理通常依赖于特定的库或...

    易语言图片无损缩放

    综上所述,易语言的图片无损缩放源码通过上述函数的组合应用,实现了对图像的高质量缩放。在实际开发中,我们需要根据具体需求选择合适的算法和参数,以达到理想的缩放效果。同时,理解这些函数的工作原理和用法,...

    c#截取一张图片的部分 或者缩放图片

    在C#编程中,处理图像是一项常见的任务,包括截取图片的部分区域以及对图片进行缩放。本篇文章将深入探讨这两个知识点,旨在帮助你理解如何使用C#来实现这些功能。 首先,我们要介绍的是如何截取图片的部分。这通常...

    Halcon-MFC-联合编程之用鼠标缩放图像、拖动图像

    1. **鼠标缩放图像**: - 在MFC中,我们通常重载OnMouseMove()函数来处理鼠标移动事件。 - 当用户按下鼠标滚轮时,我们可以检测WM_MOUSEWHEEL消息,并根据滚轮的滚动方向调整图像的缩放级别。 - 使用Halcon的`...

    手机js手势放大缩放图片插件

    "手机js手势放大缩放图片插件"就是这样一个工具,它专为移动设备设计,旨在提升用户体验,让用户能够通过简单的触摸手势来放大和缩小网页中的图片。这篇文章将深入探讨这种插件的工作原理、实现方式以及其在实际开发...

    Unity3d UGUI以鼠标位置点为中心缩放图片项目源码

    总之,"Unity3d UGUI以鼠标位置点为中心缩放图片项目源码"是一个实用的示例,展示了如何利用Unity3d的UGUI系统结合鼠标交互来实现图片的动态缩放功能。通过深入理解UGUI的工作原理和事件处理机制,开发者可以进一步...

    手势缩放图片代码

    在Android开发中,手势识别是实现用户交互的重要一环,特别是在图像查看器或者地图应用中,手势缩放图片是一项常见的功能。"手势缩放图片代码"这个主题涉及到的核心知识点包括手势检测、ImageView的使用以及Android...

    C#双三次插值缩放图像

    ### C# 双三次插值缩放图像 #### 一、引言 图像处理领域中,缩放操作是一项基本而重要的技术。为了提高缩放后图像的质量,避免图像失真,选择合适的插值算法至关重要。本文主要介绍了双三次插值算法在C#中的实现,...

    照片查看器缩放图片功能

    缩放图片功能背后的原理涉及到图像处理和计算机图形学。在数字图像中,图片由像素组成,每个像素代表一个颜色值。放大图片实际上是在增加像素的数量,而缩小图片则是在减少像素数量。为了在放大时不出现明显的锯齿状...

    Android 双指拖动和双指缩放图片

    - 正片叠底是一种图像合成模式,常用于绘画软件中,使得绘制的线条与背景图片结合时产生一种透明度叠加的效果。在Android中,我们可以通过自定义View来实现。 - 自定义一个`View`,重写`onDraw()`方法。在该方法中...

    批量缩放图片的Java实现

    总之,批量缩放图片的Java实现是一个结合了文件操作、图像处理和可能的并发编程的技术问题。`PictureResize.java`代码应当详细展示了这些技术点的实现,通过对代码的阅读和理解,开发者可以学习到如何在实际项目中...

    android缩放图片代码实例

    通常,PNG适用于有透明需求的图像,JPEG适用于色彩丰富的图片。JPEG具有更高的压缩比,能有效减少内存占用。 #### 3.2 动态调整`inSampleSize` 根据设备的屏幕分辨率动态计算`inSampleSize`,确保图片在不失真的...

    以鼠标为中心缩放图片

    6. **图像处理**:缩放图像通常涉及到图像的重采样,即根据新的尺寸重新计算像素值。这可以使用插值算法,如最近邻插值、双线性插值或更高级的插值方法,以保持图像质量。 7. **实时更新**:在拖动过程中,应实时...

    Qt 图片缩放,支持滚轮和按键缩放

    在Qt框架下,图片缩放是一项常见的功能,尤其在图形用户界面(GUI)应用中,如图像查看器或编辑器。本项目利用Qt 5.3.2版本实现了这一功能,支持通过滚轮和按键进行图片的放大与缩小,同时具备复位和切换图片的能力...

    C#图片浏览支持鼠标拖动与滚轮缩放.rar_C#_telephone9gy_图片缩放_缩放_鼠标缩放图片

    在C#编程中,开发一个图像查看器应用时,常常需要实现用户可以通过鼠标进行图片的浏览、拖动和缩放功能。本项目“C#图片浏览支持鼠标拖动与滚轮缩放.rar”正是这样一个实例,它展示了如何利用C#语言来实现这些交互...

    jQuery支持局部缩放图片放大镜插件.zip

    2. **图片外部缩放**:与内部缩放不同,外部缩放会在图片的旁边或者下方创建一个新的区域,展示放大后的图像。这种方式通常会创建一个独立的放大视窗,用户可以通过移动鼠标来查看不同位置的细节,而不影响原始图片...

Global site tag (gtag.js) - Google Analytics