`

Java对图片的处理---缩放图像、图像切割、图像类型转换、彩色转为黑白

阅读更多
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();
        }
    }

    /** *//**
     * 图像切割
     * @param srcImageFile 源图像地址
     * @param descDir      切片目标文件夹
     * @param destWidth    目标切片宽度
     * @param destHeight   目标切片高度
     */
    public static void cut(String srcImageFile, String descDir, int destWidth, int destHeight)
    {
        try
        {
            Image img;
            ImageFilter cropFilter;
            // 读取源图像
            BufferedImage bi = ImageIO.read(new File(srcImageFile));
            int srcWidth = bi.getHeight(); // 源图宽度
            int srcHeight = bi.getWidth(); // 源图高度
            if (srcWidth > destWidth && srcHeight > destHeight)
            {
                Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);
                destWidth = 200; // 切片宽度
                destHeight = 150; // 切片高度
                int cols = 0; // 切片横向数量
                int rows = 0; // 切片纵向数量
                // 计算切片的横向和纵向数量
                if (srcWidth % destWidth == 0)
                {
                    cols = srcWidth / destWidth;
                }
                else
                {
                    cols = (int) Math.floor(srcWidth / destWidth) + 1;
                }
                if (srcHeight % destHeight == 0)
                {
                    rows = srcHeight / destHeight;
                }
                else
                {
                    rows = (int) Math.floor(srcHeight / destHeight) + 1;
                }
                // 循环建立切片
                // 改进的想法:是否可用多线程加快切割速度
                for (int i = 0; i < rows; i++)
                {
                    for (int j = 0; j < cols; j++)
                    {
                        // 四个参数分别为图像起点坐标和宽高
                        // 即: CropImageFilter(int x,int y,int width,int height)
                        cropFilter = new CropImageFilter(j * 200, i * 150, destWidth, destHeight);
                        img = Toolkit.getDefaultToolkit().createImage(
                                        new FilteredImageSource(image.getSource(), cropFilter));
                        BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
                        Graphics g = tag.getGraphics();
                        g.drawImage(img, 0, 0, null); // 绘制缩小后的图
                        g.dispose();
                        // 输出为文件
                        ImageIO.write(tag, "JPEG", new File(descDir + "pre_map_" + i + "_" + j + ".jpg"));
                    }
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    /** *//**
     * 图像类型转换 GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)
     */
    public static void convert(String source, String result)
    {
        try
        {
            File f = new File(source);
            f.canRead();
            f.canWrite();
            BufferedImage src = ImageIO.read(f);
            ImageIO.write(src, "JPG", new File(result));
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /** *//**
     * 彩色转为黑白
     * @param source
     * @param result
     */
    public static void gray(String source, String result)
    {
        try
        {
            BufferedImage src = ImageIO.read(new File(source));
            ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
            ColorConvertOp op = new ColorConvertOp(cs, null);
            src = op.filter(src, null);
            ImageIO.write(src, "JPEG", new File(result));
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    /** *//**
     * @param args
     */
    public static void main(String[] args)
    {
        scale("c:\\test\\456.jpg","C:\\test\\image1.jpg",2,false);
        cut("c:\\test\\456.jpg","C:\\test\\image2.jpg",64,64);
        gray("c:\\test\\456.jpg","C:\\test\\image4.jpg");
    }

}
 

 

 

分享到:
评论
1 楼 yonlist 2009-12-12  
谢谢啦,指个小错误:
int srcWidth = bi.getHeight(); // 源图宽度  
int srcHeight = bi.getWidth(); // 源图高度 
这2个写反了

相关推荐

    图片处理工具类(缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等)

    标题提到的“图片处理工具类”是一个Java编程中的实用工具类,它集成了多种图片处理功能,如图像的缩放、切割、类型转换、彩色转黑白、添加文字水印以及图片水印等。下面将详细解释这些知识点。 1. **图像缩放**: ...

    java 水印 图像处理 图片分割 裁剪 缩放

    Java图像处理技术是Java开发中的一个重要领域,涵盖了多种操作,如添加水印、图像分割、裁剪和缩放。在本项目中,这些功能被整合到一个完整的程序中,并通过单元测试进行了验证,确保了各个功能的正确性。此外,程序...

    java高清图片缩放、压缩、切割、水印源码例子

    高清缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等 功能非常强大,并且很清晰,请给好评:)

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

    在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)框架下与Halcon库集成,实现图像的鼠标缩放和拖动功能。Halcon是一款强大的机器视觉软件,提供了丰富的图像处理函数,而MFC是C++编程中用于构建...

    java图片处理类-java课程设计

    Java图片处理类是Java编程语言中用于操作和处理图像文件的核心技术,主要涉及Java的AWT(Abstract Window Toolkit)和Swing库。在Java课程设计中,学生通常会被要求掌握这些概念并应用到实际项目中,例如创建一个...

    数字图像处理 java 语言描述

    5. 图像的缩放与旋转:Java的AffineTransform类提供了图像缩放和旋转的功能,通过定义变换矩阵,可以实现对图像的几何变换。 6. 转换色彩空间:例如,将RGB图像转换为HSB或YUV空间,以便进行色彩分析和调整。Java...

    数字图像处理图片集256彩色图像

    在数字图像处理领域,256彩色图像是一种广泛使用的图像类型。这种图像通常采用8位颜色深度,可以显示从纯黑到纯白之间256种不同的灰度级或颜色,因此被称为256色图像。这个压缩包文件“数字图像处理图片集256彩色...

    gdi++实现图像压缩-图像裁剪和缩放-图像格式转换-图像dpi修改.rar

    本压缩包文件包含的是利用GDI++实现的一些关键图像操作,如图像压缩、图像裁剪和缩放、图像格式转换以及图像DPI(每英寸点数)修改。接下来,我们将深入探讨这些知识点。 首先,图像压缩是减小文件大小以节省存储...

    数字图像处理-Java语言算法描述.zip

    本资源"数字图像处理-Java语言算法描述.zip"包含了一系列关于如何使用Java来实现数字图像处理算法的详细资料。下面我们将深入探讨其中涉及的一些关键知识点。 1. **图像基本概念**: - 图像像素:图像的基本组成...

    Java图像缩放 图片缩放

    在Java编程领域,图片处理是一项常见的任务,其中图像缩放是尤为重要的操作。当我们需要调整图片大小,以适应不同的应用场景,如网页、移动设备或打印等,就需要进行图像缩放。本文将深入探讨Java中实现图像缩放的...

    Android图片裁剪----移动、缩放图片进行裁剪

    Android提供了多种库和API来处理图像,例如Bitmap类用于表示位图图像,Matrix类则用于处理图像的变换,如旋转、平移和缩放。在裁剪图片时,通常会用到ImageView和CropImageView等视图组件。 移动图片: 1. 创建一个...

    彩色图像转换软件

    彩色图像转换软件是一种用于处理和转换彩色图像的应用程序,它能够帮助用户将图像从一种格式转换为另一种格式,同时可能还支持对图像的颜色、尺寸、质量和格式进行一系列的调整和优化。在数字图像处理领域,这类软件...

    伪彩色处理(灰度图变彩色图像)

    这种处理方式通常用于将黑白照片或者单色数据转换为彩色,以更直观地展示信息。MATLAB作为一种强大的数值计算和图形处理工具,非常适合进行伪彩色处理。 在MATLAB中,我们可以利用其丰富的图像处理函数来实现这一...

    数字图像处理 - lena图

    你可以通过它们来了解不同的图像格式、图像的读取和显示方法,以及各种图像处理技术,例如图像的灰度化、色彩空间转换、滤波、边缘检测、缩放、旋转等。同时,MATLAB等工具的应用可以让你实际操作这些过程,加深理论...

    Javacv图像处理 图像翻转+缩放 - 同时处理YOLO格式注释数据

    使用javacv进行图像处理,对图片进行拉伸缩放、黑边填充缩放、图像翻转 同时对图片关联的YOLO格式注释数据进行缩放、翻转等操作

    JAVA-web数字图像处理基础

    8. **图像流处理**:在处理大量图像时,如在服务器端进行批量图片处理,可以使用图像流来提高效率。Java的`ImageInputStream`和`ImageOutputStream`提供这种能力。 9. **JPEG和PNG编码解码**:了解如何使用Java的`...

    数字图像处理-期末-大作业 Java

    2. 灰度化处理:将彩色图像转换为灰度图像,通常采用亮度加权平均法或RGB颜色空间的某个通道作为灰度值。 3. 颜色空间转换:例如从RGB转换到HSV或Lab空间,这些颜色模型在不同的图像分析任务中具有独特优势。 4. ...

    java 图像处理(模糊处理、锐化处理)

    同时,还可以结合其他图像处理技术,如色彩转换、缩放或旋转,以实现更复杂的图像效果。 在压缩包中的"图像处理(模糊处理、锐化处理)"文件,可能包含这些示例代码的完整实现。通过研究这些代码,你可以更好地理解...

    javacv-1.3.3-source_图像处理_源码

    2. **图像处理操作**:包括图像的缩放、裁剪、旋转、色彩空间转换(如RGB到灰度)、直方图均衡化、滤波操作(如高斯滤波、中值滤波)等。 3. **特征检测与匹配**:JavaCV支持SIFT、SURF、ORB等特征检测算法,以及...

    数字图像处理-Java语言算法描述

    标题《数字图像处理-Java语言算法描述》意味着本文将围绕数字图像处理技术与Java语言的结合进行阐述。从描述中可知,该文档可能引用了Wilhelm Burger和Mark J. Burge编著的《Digital Image Processing》一书,这是一...

Global site tag (gtag.js) - Google Analytics