我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java基础之简单的图片处理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java基础之简单的图片处理

一、前言

先使用一个模板图片,在图片上添加图片或者文字都可以。

二、依赖


<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.18</version>
    <optional>true</optional>
</dependency>

三、封装数据类


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.awt.*;


@Data
@NoArgsConstructor
@AllArgsConstructor
public class PositionPO {

    
    private Object data;
    
    private float x;
    
    private float y;
    
    private float w;
    
    private float h;
    
    private Font font;

    public PositionPO(Object data, float x, float y, float w, float h) {
        this.data = data;
        this.x = x;
        this.y = y;
        this.w = w;
        this.h = h;
    }

    public PositionPO(Object data, float x, float y) {
        this.data = data;
        this.x = x;
        this.y = y;
    }

    public PositionPO(Object data, float x, float y, Font font) {
        this.data = data;
        this.x = x;
        this.y = y;
        this.font = font;
    }

    public PositionPO(float x, float y, float w, float h) {
        this.x = x;
        this.y = y;
        this.w = w;
        this.h = h;
    }
}

import com.yt.distributor.po.pdf.PositionPO;
import lombok.Data;

import java.util.List;


@Data
public class ImageHandlePO {

    
    private List<PositionPO> textList;
    
    private List<PositionPO> imageList;

    public ImageHandlePO(List<PositionPO> textList, List<PositionPO> imageList) {
        this.textList = textList;
        this.imageList = imageList;
    }
}

四、常量类


package com.yt.distributor.constant;

import org.springframework.core.io.ClassPathResource;

import java.awt.*;
import java.io.File;
import java.io.IOException;


public class ImageConstant {

    
    public static final float PELLUCIDITY = 1.0F;
    
    public static final Font FONT = new Font("微软雅黑", Font.BOLD, 18);
    
    public static File POSTER_SOURCE_FILE;
    
    public static final String FORMAT = "png";

    static{
        try {
            ClassPathResource resource = new ClassPathResource("conf/poster.jpg");
            POSTER_SOURCE_FILE = resource.getFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

五、图像处理类


import com.yt.distributor.constant.ImageConstant;
import com.yt.distributor.po.img.ImageHandlePO;
import com.yt.distributor.po.pdf.PositionPO;
import lombok.extern.log4j.Log4j2;
import net.dreamlu.mica.core.utils.$;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;


@Log4j2
public class PictureSynthesis {

    
    public static final Object FLAG = true;
    
    public static File sourceFile;


    public static void main(String[] args) throws IOException {
        // 生成二维码
        BufferedImage image = QrCodeGenerator.generateQrCode("http://www.baiud.com/index.html?id=13", 192, 192);
        // 图片
        List<PositionPO> imageList = new ArrayList<>();
        imageList.add(new PositionPO(ImageIO.read(new URL("https://thirdwx.qlogo.cn/mmopen/vi_32/AtTHbmrMict69vB7ocDMbstibgvwxpK51bOoNkQiaemrImnicUK2L9OoF1JibHiceLwY53ibiaicJQibuEwLNFicJiaYcQHRiaw/132")), 120F, 1688F, 192F, 192F));
        imageList.add(new PositionPO(image, 785F, 1632F, 192F , 192F));

        // 文字
        Font font = new Font("微软雅黑", Font.PLAIN, 30);
        List<PositionPO> textList = new ArrayList<>();
        textList.add(new PositionPO("颜魔子辰", 120F, 1660F, font));
        textList.add(new PositionPO("颜魔子辰邀请您", 336F, 1758F, font));
        textList.add(new PositionPO("加入某某小店。", 336F, 1796F, font));
        textList.add(new PositionPO("长按可识别二维码", 760F, 1880F, font));

        String sourcePath = "C:\\Users\\Administrator\\Desktop\\poster.jpg";
        String savePath = "C:\\Users\\Administrator\\Desktop\\poster-handle.jpg";
        // 输出水印图片
        handleImage(new ImageHandlePO(textList, imageList), new File(sourcePath), savePath);
    }

    
    public static InputStream handleImage(ImageHandlePO po, File sourceFile) throws IOException {
        synchronized (FLAG) {
            PictureSynthesis.sourceFile = sourceFile;
            //图片处理,导出数据
            BufferedImage image = watermark(po);
            return getInputStream(image);
        }
    }

    
    public static void handleImage(ImageHandlePO po, File sourceFile, String saveFilePath) throws IOException {
        synchronized (FLAG) {
            PictureSynthesis.sourceFile = sourceFile;
            // 构建叠加层
            BufferedImage buffImg = watermark(po);
            // 输出水印图片
            generateWaterFile(buffImg, saveFilePath);
        }
    }

    
    private static BufferedImage watermark(ImageHandlePO po) throws IOException {
        // 获取底图
        BufferedImage buffImg = ImageIO.read(sourceFile);
        // 创建Graphics2D对象,用在底图对象上绘图
        Graphics2D g2d = buffImg.createGraphics();

        // 处理文字
        if ($.isNotEmpty(po.getTextList())){
            for (PositionPO pp : po.getTextList()){
                g2d.setColor(Color.black);
                g2d.setFont( pp.getFont() == null ? ImageConstant.FONT : pp.getFont());
                g2d.drawString(pp.getData().toString(), pp.getX(), pp.getY());
            }
        }
        // 处理图片
        if ($.isNotEmpty(po.getImageList())){
            for (PositionPO pp : po.getImageList()){
                BufferedImage image = (BufferedImage) pp.getData();
                // 获取层图的宽度
                int width = pp.getW() <= 0 ? image.getWidth() : (int) pp.getW();
                // 获取层图的高度
                int height = pp.getH() <= 0 ? image.getHeight() : (int) pp.getH();
                // 在图形和图像中实现混合和透明效果
                g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.class="lazy" data-src_ATOP, ImageConstant.PELLUCIDITY));
                // 绘制
                g2d.drawImage(image, (int)pp.getX(), (int)pp.getY(), width, height, null);
            }
        }
        // 释放图形上下文使用的系统资源
        g2d.dispose();
        return buffImg;
    }

    
    private static void generateWaterFile(BufferedImage buffImg, String savePath) {
        int temp = savePath.lastIndexOf(".") + 1;
        try {
            ImageIO.write(buffImg, savePath.substring(temp), new File(savePath));
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }

    
    private static void getFonts(){
        String[] fontNames=GraphicsEnvironment.getLocalGraphicsEnvironment().
                getAvailableFontFamilyNames();
        for(String fontName:fontNames){
            System.out.println(fontName);
        }
    }

    
    public static InputStream getInputStream(BufferedImage image){
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        try {
            ImageIO.write(image, ImageConstant.FORMAT, os);
            return new ByteArrayInputStream(os.toByteArray());
        } catch (IOException e) {
            log.error("提示:",e);
        }
        return null;
    }

}

六、效果图

以上的数据都是按图片的1080*1920像素来设定的,下面红框部分是动态生成的。

在这里插入图片描述

到此这篇关于Java基础之简单的图片处理的文章就介绍到这了,更多相关Java图片处理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java基础之简单的图片处理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

图形图像处理之简单图片

决定Android应用是否被用户接受的一个重要的原因就是用户界面,友好的用户界面就需要使用到图形图像处理技术,包括静态图片、动画和游戏都需要大量的图形图像处理,所谓游戏,其实就是提供更逼真,能模拟某种环境的用户界面,并根据某种规则响应用户的
2023-06-04

Python之简单的图像处理

参考:http://justcoding.iteye.com/blog/901605      http://www.iteye.com/topic/314790     PythonWare公司提供了免费的Python图像处理工具包PIL
2023-01-31

python 对图片进行简单的处理

目录安装Pillow包图片划线图片写字图片加图片水印图片模糊图片截取总结安装Pillow包pip install Pillow图片划线from PIL import Image, ImageDraw im = Image.open("blu
2022-06-02

java基础之如何封装处理

这篇文章主要介绍了java基础之如何封装处理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、private实现封装处理如果像想要知道封装,首先必须清楚如果没有封装会怎么样?
2023-06-20

Java基础之异常处理详解

异常可能是在程序执行过程中产生的,也可能是程序中throw主动抛出的。本文主要给大家介绍了Java中异常处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-05-17

用python简单处理图片(3):添加水

一、添加文字水印from PIL import Image, ImageDraw,ImageFontim = Image.open("d:/pic/lena.jpg").convert('RGBA')txt=Image.new('RGBA'
2023-01-31

Python图像处理之图像与视频处理基础教程

这篇文章主要介绍了Python图像处理之图像与视频处理基础教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-15

python基础练习之几个简单的游戏

文档介绍 利用python写“猜数字”,“猜词语”,“谁是卧底”这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列表/元组/字典/流程控制/库函数等等。 环境参数 linux平台,python3.4。需要在linu
2022-06-04

Python基础之简单的用户交互程序

我们经常使用的程序都会有与用户交互的程序,比如网页的登录,需要输入自己的账号,密码这类的用户交互功能。我们来写个简单的用户输入和输出的程序代码:user1 = input("账号:")  #申明变量user1 储存获取用户输入的账号pass
2023-01-30

uniapp基础篇之上传图片的实战步骤

应用uni-app开发跨平台App项目时,上传图片、文档等资源功能需求十分常见,下面这篇文章主要给大家介绍了关于uniapp基础篇之上传图片的相关资料,需要的朋友可以参考下
2022-12-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录