java图片处理(图片逆时针旋转90度,图片剪裁截取)

base64字符串转化成图片
给定坐标点,以及宽高范围,然后截取图片
图片逆时针旋转90度

import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;public class ImgUtil {private static final Logger log = LoggerFactory.getLogger(ImgUtil.class);/*** 根据指定坐标 截取控件元素周边图片* @param inputPath 输入图片路径* @param x         截取位置X坐标* @param y         截取位置Y坐标* @param interceptWidth 以x坐标为基准,截取的宽度* @param interceptHeight 以y坐标为基准,截取的高度* @param outputPath 输出新图片路径*/public static void interceptImg(String inputPath, int x, int y, int interceptWidth, int interceptHeight, String outputPath) {try(OutputStream out = new FileOutputStream(outputPath);   ) {File sourcePic = new File(inputPath);BufferedImage pic = ImageIO.read(sourcePic);//参数依次为,截取起点的x坐标,y坐标,截取宽度,截取高度BufferedImage pic2 = pic.getSubimage(x, y, interceptWidth, interceptHeight);//将截取的子图另行存储Image _img = pic2.getScaledInstance(interceptWidth, interceptHeight, Image.SCALE_AREA_AVERAGING);BufferedImage image = new BufferedImage(interceptWidth, interceptHeight, BufferedImage.TYPE_INT_RGB);Graphics2D graphics = image.createGraphics();graphics.drawImage(_img, 0, 0, null);graphics.dispose();ImageIO.write(pic2, "png", out);out.flush();} catch (IOException e) {log.error("图片剪裁出错", e);throw new RuntimeException(e);}}// base64字符串转化成图片public static boolean base64ToImg(String imgBase64 ,String imgFilePath) {if(imgBase64 == null || StringUtils.isEmpty(imgBase64)){return false;}int index = imgBase64.indexOf(";base64,");if (index > -1) {imgBase64 = imgBase64.substring(index + 8);}if(imgFilePath == null || StringUtils.isEmpty(imgFilePath)){return false;}File dirFile = new File(imgFilePath);if(!dirFile.getParentFile().exists()&& !dirFile.getParentFile().mkdirs()){log.warn("创建文件目录失败, 路径: {}", imgFilePath);return false;}// Base64解码byte[] b = Base64.decodeBase64(imgBase64);try(OutputStream out = new FileOutputStream(imgFilePath);){out.write(b);out.flush();return true;} catch (Exception e) {log.warn("保存图片失败", e);}return false;}/*** 图片逆时针旋转90度* @param inputBytes 源文件字节数组* @param targetPath 输出路径*/public static void leftRotate90(byte[] inputBytes, String targetPath) {// 图片类型try(InputStream inputStream = new ByteArrayInputStream(inputBytes);BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);) {BufferedImage originalImg = ImageIO.read(bufferedInputStream);leftRotate90(originalImg, targetPath);} catch (IOException e) {log.error("图片逆时针旋转90度失败", e);throw new RuntimeException("图片逆时针旋转90度失败");}}/*** 图片逆时针旋转90度* @param sourcePath 源文件路径* @param targetPath 输出文件路径*/public static void leftRotate90(String sourcePath, String targetPath) {try {BufferedImage originalImg = ImageIO.read(new File(sourcePath));leftRotate90(originalImg, targetPath);} catch (IOException e) {log.error("图片逆时针旋转90度失败", e);throw new RuntimeException("图片逆时针旋转90度失败");}}/*** 图片逆时针旋转90度* @param originalImg 源文件图形对象* @param targetPath 输出文件路径*/public static void leftRotate90(BufferedImage originalImg, String targetPath) {try {int width = originalImg.getWidth();int height = originalImg.getHeight();BufferedImage outBufferedImg = new BufferedImage(height, width, originalImg.getType());for (int i = 0; i < width; i++) {for (int j = 0; j < height; j++) {outBufferedImg.setRGB(j, width - i - 1, originalImg.getRGB(i, j));}}ImageIO.write(outBufferedImg, "png", new File(targetPath));} catch (IOException e) {log.error("图片逆时针旋转90度失败", e);throw new RuntimeException("图片逆时针旋转90度失败");}}
}

码字不易,于你有利,勿忘点赞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sensei for Mac:一键清理,系统如新!

Sensei for Mac是一款高效且易于使用的系统优化清理工具。它能够深入Mac系统内部&#xff0c;智能识别并清理无用的缓存文件、临时文件、垃圾邮件等&#xff0c;从而释放磁盘空间&#xff0c;提升系统性能。无论是日常使用还是长时间工作后&#xff0c;Sensei都能帮助你的Mac恢…

鸿蒙 HarmonyOS NEXT星河版APP应用开发阶段三-热门组件使用及案例

一、样式和结果重用 介绍 /* Extend:扩展组件&#xff08;样式、事件&#xff09; Styles: 抽取通用数据、事件 Builder:自定义构建函数&#xff08;结构、样式、事件&#xff09; */Extend /* 作用&#xff1a;扩展组件&#xff08;样式、事件&#xff09; 场景&#xff1a;…

实现异步操作sleep

这两个函数 sleep 和 delay 都是使用 JavaScript 的 Promise 和 setTimeout 来实现异步操作的。不过它们的功能略有不同&#xff0c;下面我为你详细解释&#xff1a; sleep 函数 sleep 函数接受一个秒数 seconds&#xff0c;并返回一个 Promise&#xff0c;该 Promise 在指定的…

封装图片占位图组件

<laze-image class="image" :url="item.image" :game_name="item.game_name" :placeholder="require(@/static/images/common/placeholder.png)"></laze-image> 1.通过调用组件实现 先加载预览图片,再加载真实的图片 2…

Vscode连接远程服务器中的docker容器

配置远程docker容器 docker run -itd --name ubuntu-hkx --mount typebind,source/home/huangkx/docker,target/docker -p2001:22 ubuntu-hkx-image 进入docker docker exec -it ubuntu-hkx bash docker安装ssh 安装完成后启动 service ssh start 配置key 把本地的~/.ssh…

中国杀出全球首个烹饪大模型

什么&#xff1f;烹饪也有大模型&#xff1f;&#xff01; 没有听错&#xff0c;这就是国产厨电龙头老板电器最新发布——“食神”大模型。 数十亿级行业数据&#xff0c;数千万级知识图谱加持&#xff0c;据称还是全球首个。 它能为每个人提供个性化量身定制的解决方案&…

Kubernetes面试整理-如何配置和使用Service, Ingress?

在 Kubernetes 中,Service 和 Ingress 是用于管理和暴露应用程序的网络访问的主要资源。以下是如何配置和使用 Service 和 Ingress 的详细指南: Service Service 是一种抽象,用于定义一组 Pod 的逻辑集合,并提供一种访问这些 Pod 的策略。Service 可以使应用程序内部或外部…

TikTok短视频矩阵系统

随着数字化时代的到来&#xff0c;短视频已成为人们获取信息、娱乐消遣的重要渠道。TikTok&#xff0c;作为全球最受欢迎的短视频平台之一&#xff0c;其背后的短视频矩阵系统是支撑其成功的关键因素。本文将深入探讨TikTok短视频矩阵系统的构成、功能以及它在新媒体时代中的影…

什么领夹麦的音质最好又降噪?揭秘多款降噪出色的无线领夹麦克风

随着短视频的兴起&#xff0c;将视频拍摄方面的外设推到了风口浪尖上&#xff0c;麦克风作为视频拍摄或者现场直播使用的主要拾音工具&#xff0c;自然成为了大家非常关注的一个摄影外设工具&#xff0c;毕竟一款好的拾音工具能够给视频创作者或者直播博主带来更好的使用体验。…

汇川H5u小型PLC作modbusRTU从站设置及测试

目录 新建工程COM通讯参数配置协议选择协议配置 查看手册Modbus地址对应关系仿真测试 新建工程 新建一个H5U工程&#xff0c;不使用临时工程 系列选择H5U即可 COM通讯参数配置 协议选择 选择ModbusRTU从站 协议配置 端口号默认不可选择 波特率这里使用9600 数据长度&…

Nuxt3 实战 (十二):SEO 搜索引擎优化指南

添加 favicon 图标和 TDK&#xff08;标题、描述、关键词&#xff09; nuxt.config.ts 添加配置&#xff1a; export default defineNuxtConfig({app: {title:Dream Site,meta: [{ name: keywords, content: Nuxt.js,导航,网站 },{ name: description, content: 致力于打造程…

CCF秀湖会议:“第五存储架构”引发关注

近日&#xff0c;中国计算机学会第十三期CCF秀湖会议在苏州CCF业务总部&学术交流中心正式召开。本次会议就“新应用与硬件驱动下的存储技术创新”主题进行深入交流和探讨。中国工程院院士、清华大学郑纬民教授&#xff0c;华中科技大学金海教授&#xff0c;清华大学舒继武教…

TCPDump抓包命令详解:网络分析的强大工具

目录 一. 安装 TCPDump 二. 常用参数 三. 过滤表达式 基于协议的过滤&#xff1a; 基于地址的过滤&#xff1a; 基于端口的过滤&#xff1a; 逻辑操作符&#xff1a; 基于数据包内容的过滤&#xff1a; 基于时间戳的过滤&#xff1a; 基于MAC地址的过滤&#xff1a; …

计算机毕业设计Thinkphp/Laravel+vue高校图书馆借阅系统_i0521

图书馆借阅系统&#xff0c;主要的模块包括首页、个人中心、会员管理、会员等级管理、图书分类管理、图书信息管理、图书借阅管理、借阅服务评价管理、超时费用管理、留言板管理、系统管理等功能。系统中管理员主要是为了安全有效地存储和管理各类信息&#xff0c;还可以对系统…

浅学JVM

一、基本概念 目录 一、基本概念 二、JVM 运行时内存 1、新生代 1.1 Eden 区 1.2. ServivorFrom 1.3. ServivorTo 1.4 MinorGC 的过程 &#xff08;复制- >清空- >互换&#xff09; 1.4.1&#xff1a;eden 、servicorFrom 复制到ServicorTo&#xff0c;年龄1 …

力扣每日一题 特别的排列 DFS 记忆化搜索 位运算 状态压缩DP

Problem: 2741. 特别的排列 &#x1f468;‍&#x1f3eb; 参考题解 &#x1f37b; 暴搜 ⏰ 时间复杂度&#xff1a; O ( N ) O(N) O(N) class Solution {public int specialPerm(int[] nums) {boolean[] visited new boolean[nums.length];return dfs(nums, 0, -1, visit…

目标检测系列(二)yolov1的全面讲解

目录 1、网络结构 2、检测原理 3、制作训练正样本方法 4、损失函数 5、前向推理 6、模型缺限 YOLO的全称是you only look once&#xff0c;指只需要浏览一次就可以识别出图中的物体的类别和位置。YOLO被称为Region-free方法&#xff0c;相比于Region-based方法&#xff0…

AI已经火了一年了,真正属于普通人的机会在哪里?

对普通人来说&#xff0c;AI的机会在哪里&#xff1f; 这是过去一年来&#xff0c;我收到过最多的问题 在这篇文章里&#xff0c;我会把我目前对AI的理解阐述出来&#xff0c;分享3个普通人能够把握的方向 讲清楚在现在这个时间节点&#xff0c;当我们在说搞AI的时候&#x…

JavaScript Array filter() 方法

filter()方法允许你根据特定的条件从一个数组中筛选出新的数组。 filter()方法的语法: arr.filter(callback(element, index, array), thisValue) callback函数是必需的,它会为数组中的每个元素执行一次。该函数返回一个值,用于判断元素是否应该包含在新数组中。 element 是…

SpringBoot AOP + Redis延时双删功能

延时双删功能就不过多解释了&#xff0c;场景就是&#xff0c;为了少关联表&#xff0c;将数据的id 跟name存到redis中&#xff0c;但是为了解决数据一致性的问题&#xff0c;即一旦name修改了&#xff0c;如何更新redis&#xff0c;写了如下代码&#xff0c;部分参考了其他人的…