ImageIO的应用

这篇具有很好参考价值的文章主要介绍了ImageIO的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ImageIO的应用

一、关于IO流

在讲imageio之前,我们先来复习一下IO流的使用。

这里我建立一个Java类,用来实现读取文档中的内容,并且能够识别换行,话不多说,上代码:

package com.Evan.demo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class ShowFile {
    // 创建方法transReadByBuf()从文件读出内容;
    public void transReadByBuf(File file) {
        FileInputStream fis;
        InputStreamReader isr;
        BufferedReader br;
        String n;
        try {
            fis = new FileInputStream(file);
            isr = new InputStreamReader(fis);
            br = new BufferedReader(isr);

​            while ((n = br.readLine()) != null) {
​    // 从字符输入流中读取文本时可以使用readLine()方法,从而对换行符进行识别,一行一行地读取文本;
​                System.*out*.println(n);
​            }
​            fis.close();
​            isr.close();
​            br.close();
​        } catch (FileNotFoundException e) {
​            e.printStackTrace();
​        } catch (IOException e) {
​            e.printStackTrace();
​        }
​    }

​    //  在测试方法中调用transReadByBuf()方法。
​    public static void main(String[] args) {
​        File file = new File("a.txt");
​        if (!file.exists()) {
​            try {
​                file.createNewFile();
​            } catch (IOException e) {
​                e.printStackTrace();
​            }
​        }
​        ShowFile showFile = new ShowFile();
​        showFile.transReadByBuf(file);
​    }
}

代码是不是简洁易懂?有手就行。

注意一下,这里的文档需要建立在F:\Java_Prj\Java_Project包下

这里贴张图,展示一下文档内容

ImageIO的应用

然后控制台输出为下图:

ImageIO的应用

是不是so easy ,以上内容完全是学校老师教的内容,然后下面就是本文的主要内容啦(敲黑板.jpg)!

二、ImageIO读取图片

1.使用AWT绘制窗口

当界面很复杂,代码很多时,我们就建立了一个init()方法用于组装界面,然后在main方法中调用init()方法,代码如下:

package com.Evan.demo;

import java.awt.*;

public class AWT_init {
    Frame frame = new Frame("init方法");
    public void init(){

    }

    public static void main(String[] args) {
        new AWT_init().init();
    }
}

当然啦,上面的代码只是一个小框架,没有实现效果啦;

然后我们用AWT代码来写一个简单的窗口,代码如下:

package com.Evan.demo;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Awt_demo {
    private Frame frame = new Frame();
    
    public void init() throws Exception{

        frame.setBounds(200,200,740,508);

        frame.setVisible(true);

        frame.addWindowListener(new WindowAdapter() {
            //重写方法实现关闭窗口效果
        @Override
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
}

    public static void main(String[] args) throws Exception {
        new Awt_demo().init();
    }
}

实现的效果如下:

ImageIO的应用

一个小窗口就完成啦!

2.使用imageio读取图片

接下来我们就来写一个关于AWT的代码,用来读取本地图片

package com.Evan.demo;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class Awt_demo {
    private Frame frame = new Frame("图片查看器");

    BufferedImage image;

    private class MyCanvas extends Canvas {
        @Override
        public void paint(Graphics g) {
            g.drawImage(image, 0, 0, null);
        }
    }

    MyCanvas drawArea = new MyCanvas();

    public void init() throws Exception {
        //组装视图

        try {
            File file = new File("C:\\Users\\Evan\\Desktop\\Evan.jpg");
            image = ImageIO.*read*(file);
            drawArea.repaint();

        } catch (IOException e) {
            System.*out*.println(e.getMessage());
        }

        frame.add(drawArea);
        frame.setBounds(200, 200, 740, 508);

        frame.setVisible(true);

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.*exit*(0);
            }
        });
    }

    public static void main(String[] args) throws Exception {
        new Awt_demo().init();
    }
}

代码实现效果如下:

ImageIO的应用

这里没有完全展示出图片,不过不要紧,我们可以修改代码

frame.setBounds(200, 200, 740, 508);

数值分别表示(x,y,width,height)

3.使用Swing绘制窗口

package com.Evan.demo;

import java.awt.Graphics;
import java.awt.Image;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;

public class ImageDemo extends JFrame {

​    private Image image;

​    public ImageDemo() {
​        setTitle("图片展示");
​        setBounds(200, 200, 740, 708);
​        setDefaultCloseOperation(WindowConstants.*EXIT_ON_CLOSE*);
​        setVisible(true);
​    }

​    public void loadImage(String path) {
​        try {
​            image = ImageIO.*read*(new File(path));
​        } catch (IOException e) {
​            System.*out*.println(e.getMessage());
​        }
​    }

​    @Override
​    public void paint(Graphics g) {
​        if (image != null) {
​            g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
​        }
​    }

​    public static void main(String[] args) {
​        ImageDemo id = new ImageDemo();
​        id.loadImage("C:\\Users\\Evan\\Desktop\\Evan.jpg");
​        id.repaint();
​    }
}

这里说一下AWT和Swing的比较啦,chat机器人是这样解释的:

AWT(Abstract Window Toolkit)和 Swing 是 Java 中两种用于 GUI 编程的图形库。它们都可以创建各种 GUI 元素,如窗口、按钮、文本框等,并提供了类似事件处理、布局管理等功能。

下面是 AWT 和 Swing 的比较:

  1. 跨平台性:AWT 的组件依赖于本地系统的 GUI 组件,所以在不同的操作系统上显示效果可能会有所不同;而 Swing 使用自己的组件,可以实现真正的跨平台界面设计。
  2. 外观和风格:AWT 组件使用本地系统的外观和样式,所以在不同的操作系统上可能呈现不同的外观;而 Swing 运行时使用相同的外观和风格,可以使应用程序在所有平台上具有相同的外观和行为。
  3. 性能:AWT 组件是本地组件,直接依赖于本地系统的 GUI 组件,所以运行速度比 Swing 快;而 Swing 组件是纯 Java 组件,运行速度相对较慢。
  4. 功能和灵活性:Swing 提供了更多的组件和功能,同时也提供了更好的灵活性和可扩展性,可以满足更复杂的 GUI 设计需求;而 AWT 功能相对较少,灵活性较差。
  5. 学习曲线:Swing 的学习曲线相对于 AWT 更加陡峭,因为它提供了更多的功能和灵活性;而 AWT 的学习曲线比较平缓。

总之,AWT 和 Swing 都是 Java 中用于 GUI 编程的图形库,它们在跨平台性、外观和风格、性能、功能和灵活性以及学习曲线等方面有所区别,开发者可以根据具体需求进行选择。

就本人来说呢,在实现读取图片上最直观的就是Swing需要继承JFrame这个类,以此实现效果,很实用,推荐!

4.ImageIO读取url和load图片

咳咳回到正题,关于读取图片,ImageIO流可以读取链接形式的图片,也可以读取本地的图片。当然啦,上面两个代码块都是读取本地图片的,以下展示读取链接形式图片的代码:

package com.Evan.demo;

import java.awt.Image;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ReadImage
{
    public static void main( String[] args )
    {
        JFrame jf = new JFrame("图片展示");
        Image image = null;

​        jf.setSize(250, 250);

​        try {
​            URL url = new URL("https://pic.cnblogs.com/avatar/3178304/20230603204309.png");
​            image = ImageIO.*read*(url);
​        } catch (IOException e) {
​            System.*out*.println(e.getMessage());
​        }

​        JLabel label = new JLabel(new ImageIcon(image));
​        jf.add(label);
​        jf.setVisible(true);

​    }
}

效果图如下:

ImageIO的应用

别看这代码少,但是导入的包多啊,可能这就是Swing的魅力吧

而如果要读取本地图片只需将上面的try catch代码改为:

try {
    File file = new File("C:\\Users\\Evan\\Desktop\\Evan.jpg");
    image = ImageIO.*read*(file);
} catch (IOException e) {
    System.*out*.println(e.getMessage());
}

三、关于Swing JLabel类

1.JLabel介绍

JLabel类可以显示文本或图像。通过在显示区域中设置垂直和水平对齐来对齐标签的内容。默认情况下,标签在显示区域中垂直居中,纯文本标签前沿对齐,仅图像标签水平居中。

如上面代码块中,窗口设置了长宽都是600,正好可以展示出图片全貌,但如果窗口过小,窗口中也会展示图片最中间的内容,即默认水平居中。

2.类构造函数

构造函数 描述
JLabel() 创建一个没有图像且标题为空字符串的JLabel实例。
JLabel(Icon image) 使用指定的图像创建JLabel实例。
JLabel(Icon image, int horizontalAlignment) 使用指定的图像和水平对齐创建JLabel实例。
JLabel(String text) 使用指定的文本创建JLabel实例。
JLabel(String text, Icon icon, int horizontalAlignment) 使用指定的文本,图像和水平对齐创建JLabel实例。
JLabel(String text, int horizontalAlignment) 使用指定的文本和水平对齐方式创建JLabel实例。

当然啦,我们使用的是第二个。

好啦,这次的分享就结束啦,继续学习Java web去了。文章来源地址https://www.toymoban.com/news/detail-477388.html

到了这里,关于ImageIO的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 苹果macOS 13.5.2正式发布 修复ImageIO进程

    9 月 8 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.5.2 更新(内部版本号:22G91),本次更新距离上次发布隔了 21 天。 需要注意的是,因苹果各区域节点服务器配置缓存问题,可能有些地方探测到升级更新的时间略有延迟,一般半小时内,不会太久。 苹果支持页面,macO

    2024年02月09日
    浏览(30)
  • Java 转换 WebP 图片,使用 webp-imageio

    WebP 是 Google 推出的一种新型图片格式,相比于传统的 PNG/JPG 图片有着更小体积的优势,在当今 Web 中有着广泛的应用。但是 Java 和 JDK 本身不支持 WebP 图像,不过我们可以使用 webp-imageio 库来支持 WebP 图片。 顺便提一提其他库支持的方式。WebP 最早是这个 webp project of Luciad 库提

    2024年02月02日
    浏览(30)
  • Python编程:学习Python自带库imageio和pickle的详细指南

    Python编程:学习Python自带库imageio和pickle的详细指南 Python是一种流行的动态编程语言,它具有简单易学、高效灵活等特点,因此备受欢迎。随着其应用领域的不断扩展,Python付带的自带库变得越来越丰富。在本篇文章中,我们将重点介绍Python常用的自带库imageio和pickle,包括这

    2024年02月08日
    浏览(33)
  • 如何在上架App之前设置证书并上传应用

    在上架App之前想要进行真机测试的同学,请查看《iOS- 最全的真机测试教程》,里面包含如何让多台电脑同时上架App和真机调试。 P12文件的使用详解 注意: 同样可以在Build Setting 的sign中设置证书,但是有点麻烦,建议就在General中设置证书,比较方便,还可以查看错误的地方

    2024年02月07日
    浏览(42)
  • 运行配置停止之前未连接应用程序服务器, 原因: java.io.1OException:Failed to retrieve RMIServer stub:javax.naming. ServiceU

    直接修改JMX端口可以直接解决 win+r输入cmd,然后输入 netstat -aon|findstr 1099 回车 输入 taskkill -f -pid 18280 这里的18280换成你查询的,然后就成功终止了在1099上的进程。打开tomcat就会成功。

    2024年02月06日
    浏览(28)
  • 关于在前台应用路由调用子应用

    在实际写项目的过程中,关于一些前台的官网首页,会需要在一写特定的路由侠调用子应用的需求,在编写的过程中在公用的方法中,来进行处理,处理思想如下,在特定的.vue文件中, 通过后端来将我们的子应用处理好给到前端,其中包含key值,以及子应用名,以及子应用

    2024年01月21日
    浏览(21)
  • C# 关于队列的应用

    当接收到硬件设备传来的数据队列时,比如拍到的一幅幅照片,需要按顺序调用识别模块时,就需要用队列来缓存调用的方法。示例代码如下: 注意关闭程序时,将isProcessQueue=false,让线程自己关闭,不会出现异常。

    2024年02月11日
    浏览(14)
  • 关于同态加密算法的原理与应用

    (一)同态加密算法的基本概念   (二)算法特点 (三)算法分类 (一)公钥加密算法 (二)同态加密算法的实现过程 (一)Paillier算法 图4.1 验证同态加正确性 图4.2 验证同态标量乘正确性 (二)RSA算法 (一)数据隐私保护 (二)云计算安全 (一)医疗数据共享与隐私

    2024年02月03日
    浏览(25)
  • 关于AIGC的一些概念和应用

    AIGC是指 人工智能生成内容 (Artificial Intelligence Generated Content)。这是一个基于人工智能技术的应用,它可以通过训练大量的数据,学习人类语言的特征和模式,并生成各种内容,如文本、图像、语音等。以下是关于AIGC的深入理解: 1.技术基础: AIGC主要基于机器学习技术。

    2024年02月04日
    浏览(69)
  • 关于BMS的介绍及应用领域

    电池管理系统 (Battery Management System,BMS)是一种集成电路系统,它用于监测和控制电池系统状态,以确保电池的正常运行和安全使用。BMS的应用涵盖了电动汽车、储能系统、无人机、电动工具等各个领域,可以提高电池的使用寿命、安全性能和续航能力。在这篇文章中,我

    2024年02月02日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包