ImageIO 写出图片

我们这里通过内存中构建出来一个图片并写出到文件中;首先我们先在内存中构建一张图片;然后再将内存中构建的图片写出到文件中,这里将内存中图片写入到文件中时可使用ImageIO提供的静态方法写出,也可以使用ImageWriter提供的方法写出。

内存中创建图片

private BufferedImage createBufferedImage() {
    // 创建图片
    BufferedImage bufferedImage = new BufferedImage(400, 200, BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics = bufferedImage.createGraphics();
    // 设置背景
    graphics.setBackground(Color.white);
    graphics.clearRect(0,0,400,200);
    // 设置文本
    graphics.setColor(Color.blue);
    graphics.setFont(new Font("楷体", Font.BOLD, 36));
    graphics.drawString("你好,世界", 50, 50);
    graphics.dispose();
    return bufferedImage;
}

我们创建了一个图片,并设置了图片的背景色,并写入了你好,世界

ImageWriter写出图片

private static void writeByImageWriter(BufferedImage bufferedImage) throws IOException {
    // 创建图片输出流
    ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(new File("/home/mointor/hello.png"));
    // 获取图片写出器
    Iterator<ImageWriter> imageWriterIterator = ImageIO.getImageWritersByFormatName("png");
    if (!imageWriterIterator.hasNext()) {
        // 未找到图片写入对象
    } else {
        ImageWriter imageWriter = imageWriterIterator.next();
        // 设置图片输出流
        imageWriter.setOutput(imageOutputStream);
        // 写出图片
        imageWriter.write(bufferedImage);
    }
}

首先我们使用ImageIO.createImageOutputStream创建了图片输出流,此方法提供了重载,可以通过文件(File)、输出流(OutputStream)、随机访问文件(RandomAccessFile)创建图片输出流;

ImageIO.getImageWritersByFormatName可以用于获取图片写出器对象,与创建图片读取器对象类似;获取到图片写出器之后需要设置图片输出流,用于指定图片写出的位置;最后使用write方法写出图片。

ImageIO写出图片

private void writeByImageIO(BufferedImage bufferedImage) throws IOException {
    ImageIO.write(bufferedImage, "png", new File("/home/mointor/hello.png"));
}

ImageIO提供了静态方法write,能够直接写出图片;write方法提供了多个重载;可以向文件(File)、输出流(OutputStream)、图片输出流(ImageOutputStream)中写出图片。

其实ImageIO写出图片的方式,其实现原理也是使用ImageWriter,下面我们结合源码具体分析一下:

public static boolean write(RenderedImage im,
                                String formatName,
                                File output) throws IOException {
    if (output == null) {
        throw new IllegalArgumentException("output == null!");
    }

    // 根据文件格式获取图片写出器
    ImageWriter writer = getWriter(im, formatName);
        if (writer == null) {
        /* Do not make changes in the file system if we have
         * no appropriate writer.
         */
        return false;
    }

    // 删除文件
    output.delete();
    // 创建图片输出流
    ImageOutputStream stream = createImageOutputStream(output);
    if (stream == null) {
        throw new IIOException("Can't create an ImageOutputStream!");
    }
    try {
        // 写出图片
        return doWrite(im, writer, stream);
    } finally {
        stream.close();
    }
}

private static ImageWriter getWriter(RenderedImage im,
                                         String formatName) {
    ImageTypeSpecifier type = ImageTypeSpecifier.createFromRenderedImage(im);
    // 获取图片写出器
    Iterator<ImageWriter> iter = getImageWriters(type, formatName);

    if (iter.hasNext()) {
        return iter.next();
    } else {
        return null;
    }
}

private static boolean doWrite(RenderedImage im, ImageWriter writer,
                                 ImageOutputStream output) throws IOException {
    if (writer == null) {
        return false;
    }
    // 设置图片输出流
    writer.setOutput(output);
    try {
        // 写出图片
        writer.write(im);
    } finally {
        writer.dispose();
        output.flush();
    }
    return true;
}

 从上面代码可以看出,ImageIO提供的write方法实现中使用的也是ImageWriter进行写出。

总结

ImageIO中提供的write方法,提供了多个重载方法写出图片;其实现原理是使用ImageWriter把图片写出。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果您想将图像从其他格式转换为HEIF(High Efficiency Image Format)格式,可以使用以下代码: ``` import imageio def convert_to_heif(input_file, output_file): image = imageio.imread(input_file) imageio.imwrite(output_file, image, format='heif') # 调用转换函数 convert_to_heif('input.jpg', 'output.heif') ``` 此代码使用了 Python 库 `imageio`,因此需要先安装该库,可以使用以下命令进行安装: ``` pip install imageio ``` 希望对您有所帮助! ### 回答2: 转换HEIF(High Efficiency Image Format)的代码可以使用图像处理库来实现。以下是一个示例,使用Pillow库进行转换: ```python from PIL import Image def convert_to_heif(image_path, output_path): # 打开原始图像 image = Image.open(image_path) # 将图像保存为HEIF格式 image.save(output_path, 'heif') # 示例用法 convert_to_heif('input.jpg', 'output.heic') ``` 在这个示例中,`convert_to_heif`函数接收两个参数:原始图像的路径和输出HEIF图像的路径。首先,它使用Pillow库的`Image.open`方法打开原始图像。然后,它使用`save`方法将图像保存为HEIF格式,并指定文件的输出路径和文件类型('heif')。最后,通过调用`convert_to_heif`函数,可以将指定的JPG图像转换为HEIF图像。 请注意,上述示例代码仅适用于安装了Pillow库的Python环境,并且HEIF文件格式的读取和写入已经在该库中配置。如果您的环境不满足这些要求,您可能需要使用其他工具或库来完成HEIF格式的转换。 ### 回答3: 转换图片格式为HEIF格式的代码如下: ``` import cv2 def convert_to_heif(image_path, output_path): # 读取输入图片 image = cv2.imread(image_path) # 构建HEIF编码器 heif_encoder = cv2.heif_writer(output_path) # 将图片写入HEIF编码器 heif_encoder.write(image) # 释放HEIF编码器 heif_encoder.release() print("图片已成功转换为HEIF格式") # 示例使用 input_image = "input.jpg" output_image = "output.heif" convert_to_heif(input_image, output_image) ``` 上述代码中,使用了OpenCV库的heif_writer函数来实现将图片转换为HEIF格式。首先通过`cv2.imread`读取输入图片,然后创建一个HEIF编码器对象`heif_encoder`。接下来,使用`heif_encoder.write`将输入图片写入HEIF编码器,最后通过`heif_encoder.release()`释放编码器。转换完成后,会打印出"图片已成功转换为HEIF格式"的提示信息。 示例中的输入图片为"input.jpg",输出图片为"output.heif",可以根据实际情况修改。需要确保在运行代码之前已经安装了OpenCV库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值