`
liangjian103
  • 浏览: 176967 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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("D:\100CASIO\CIMG0001.JPG","C:\Documents and Settings\ibm\桌面\image.jpg",10,false);
    }

}

 

分享到:
评论

相关推荐

    Java实现字节流与图片的转化

    如果需要在程序中操作图片,可以使用Java的`javax.imageio`包中的`ImageIO`类将字节流转换为`BufferedImage`对象: ```java BufferedImage image; try (InputStream is = new ByteArrayInputStream(imageData))...

    Java实现字节流与图片的转化Java源码

    在Java编程中,字节流(Byte Stream)是处理数据的基本方式,特别是在处理二进制数据,如图片、音频或视频文件时。本教程将详细讲解如何使用Java实现字节流与图片之间的转换,这对于在网络上传输或者存储图片等二...

    Java字符流与字节流区别

    Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流...

    用Java实现的图片加密程序

    本项目"用Java实现的图片加密程序"正是关注这一主题,它利用Java的IO流处理技术,实现了对图片文件的加密和解密功能。以下是关于这个项目的一些详细知识点: 1. **Java IO流**:Java的IO流是处理输入输出的基础,它...

    java文件与流操作code

    - 字节流:Java中的InputStream和OutputStream是所有字节输入流和输出流的基类,包括FileInputStream、FileOutputStream等,用于处理二进制数据,如图片、音频等。 - 字符流:Reader和Writer是所有字符输入流和...

    java实现图片转换为视频

    Xuggler是基于C++的FFmpeg库的一个Java封装,它允许开发者直接在Java中操作音视频流。ffmpeg4java则是对FFmpeg命令行工具的Java包装,通过执行命令行指令实现视频处理。这两种库都能很好地完成图片转视频的任务。 ...

    java操作wordpdf图片生成图片水印

    本篇将详细介绍如何使用Java来操作Word和PDF文档,并在其中的图片上生成水印。 首先,我们关注的是Java对Word文档的操作。Apache POI是一个非常流行的Java库,用于读写Microsoft Office格式的文件,包括Word(.docx...

    java图片浏览管理系统

    4. **图片处理库**:为了显示和操作图片,系统可能依赖于Java的内置库如Java AWT或第三方库如Apache Commons Imaging(前身是Sanselan)或Java Advanced Imaging (JAI)。这些库提供了读取、解析、转换不同格式图片的...

    Java流操作文件

    Java流是Java编程语言中处理输入输出操作的重要机制,它为数据传输提供了高效且灵活的方式。在Java中,文件操作是通过流的概念实现的,这允许我们读取、写入、移动、复制以及修改文件。下面我们将深入探讨Java流如何...

    Java Poi流根据Word模板插入相应的文本、表格和图片,并生成新的Word报告。

    在这个场景中,我们关注的是如何利用Java POI库通过Word模板生成包含特定文本、表格和图片的报告。 首先,我们需要了解Java POI中的XWPFDocument类,它是用来处理.docx文件的。XWPFDocument可以读取、修改和创建...

    JAVA 文件常用流操作.zip

    在实践中,结合这些流的特性,我们可以实现复杂的文件操作,如读取文件内容,写入文件,复制文件,或者处理二进制文件(如图片、音频等)。通过理解这些基础知识,开发者可以更好地管理Java应用程序中的文件输入输出...

    采用java实现图片水印

    `java.awt`包中的`BufferedImage`类用于创建和操作图像,而`javax.imageio`包则用于读取、写入和操作各种格式的图像文件。 添加水印的过程通常包括以下步骤: 1. **读取原始图片**:使用`ImageIO.read()`方法从...

    java写入excel图片操作

    在Java编程中,将图片写入Excel文件是一项常见的任务,特别是在数据分析、报表生成或数据可视化的情景下。这里,我们将详细探讨如何实现这个功能,主要依赖于`Apache POI`库来操作Excel,并结合`JFreeChart`库来创建...

    Java开发将连续的图片转成视频

    在Java中,我们可以使用Java AWT或Swing库中的`BufferedImage`类来处理和操作图片。 2. 视频编码: 视频是由连续的图像帧组成的,这些帧以特定的帧率播放,给人以动态的视觉效果。编码是将这些图像帧转化为特定...

    java 输入输出流 实例

    本实例将深入讲解如何使用Java I/O流进行文件的读取和写入操作。 首先,Java中的I/O流分为两大类:字节流和字符流。字节流处理的数据单位是字节,而字符流处理的是Unicode字符。字节流包括InputStream和...

    java web 图片压缩

    - 使用Java的文件I/O操作,如`java.nio.file.Files`类,可以遍历指定目录下的所有图片文件,逐一进行处理。 - 多线程技术可以加速批量处理过程,通过`java.util.concurrent`包中的工具,如`ExecutorService`和`...

    Java实现用Mysql存取图片操作实例

    本实例将详细介绍如何使用Java和MySQL进行图片的存取操作。 首先,让我们了解MySQL中的BLOB类型。BLOB是一个用来存储大量二进制数据的字段类型,它不受字符集的限制,适合存储图像、音频或视频文件等。MySQL提供了...

    JAVA输入输出流实验报告

    首先,字节流主要用于处理二进制数据,如图片、音频文件等,而字符流则更适合处理文本数据。在Java中,字节流的基类是`InputStream`和`OutputStream`,分别用于处理输入和输出。字符流的基类则是`Reader`和`Writer`...

    java 图片水印 改变图片大小

    然后,可以调用Java的图片处理函数,对保存的图片进行操作。最后,返回处理后的图片路径或者直接显示在页面上。 在实际应用中,我们还需要考虑性能优化,比如使用内存缓存减少磁盘I/O,或者使用多线程处理大量图片...

    使用SDK抓取海康威视录像机图片及视频流实时显示

    在本文中,我们将深入探讨如何使用Java语言配合海康威视的SDK来抓取NVR(网络视频录像机)的图片和视频流,并实现实时显示。海康威视是全球知名的安防监控设备制造商,其提供的SDK允许开发者进行深度集成和定制化...

Global site tag (gtag.js) - Google Analytics