@ResponseBody
@PostMapping("/fastuploads")
String fastuploads(@RequestParam("file") MultipartFile file) {
String url = "";
try {
String pictureByName = PfDemo.getPictureByName(file);
url = pictureByName;
} catch (Exception e) {
e.printStackTrace();
}
return url;
}
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.imageio.ImageIO;
import org.springframework.web.multipart.MultipartFile;
import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.imaging.jpeg.JpegProcessingException;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.MetadataException;
import com.drew.metadata.exif.ExifDirectoryBase;
import com.project.server.clazz.FtpSeting;
import com.project.util.FtpUtil3;
import com.project.util.IDUtils;
public class PDemo {
private static String path = "服务器临时路径";
// 处理ios图片旋转的问题
public static String getPictureByName(MultipartFile file){
try {
//通过输入流获取图片数据
InputStream inStream = file.getInputStream();
BufferedImage src = ImageIO.read(inStream);
String fileName = "1234.jpg";
BufferedImage bi = null;
//图片存在
if(src != null){
//获取图片旋转角度
int angel = getRotateAngleForPhoto(file);
bi = rotateImage(src, angel);
}else{
//图片不存在
System.out.println("图片不存在");
//return "";
}
ImageIO.write(bi, "JPG", new FileOutputStream(path+fileName));
//先生成个临时文件 上传到服务器后删除
File file1 = new File(path+fileName);
//自己封装的上次服务器方法
skinImg(ftpSeting, file1, fileName);
file1.delete();
return 图片路径;
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
/**
* 图片翻转时,计算图片翻转到正常显示需旋转角度
*/
public static int getRotateAngleForPhoto(MultipartFile files){
// File file = new File(fileName);
int angel = 0;
Metadata metadata;
File file = null ;
try{
file = multipartFileToFile(files);
metadata = JpegMetadataReader.readMetadata(file);
Directory directory = metadata.getFirstDirectoryOfType(ExifDirectoryBase.class);
if(directory != null && directory.containsTag(ExifDirectoryBase.TAG_ORIENTATION)){
// Exif信息中方向
int orientation = directory.getInt(ExifDirectoryBase.TAG_ORIENTATION);
// 原图片的方向信息
if(6 == orientation ){
//6旋转90
angel = 90;
}else if( 3 == orientation){
//3旋转180
angel = 180;
}else if( 8 == orientation){
//8旋转90
angel = 270;
}
}
file.delete();
} catch(JpegProcessingException e){
e.printStackTrace();
} catch(MetadataException e){
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
System.out.println("图片旋转角度:" + angel);
return angel;
}
/**
* 旋转图片
*/
public static BufferedImage rotateImage(BufferedImage bufferedImage, int angel) {
if (bufferedImage == null) {
return null;
}
if (angel < 0) {
// 将负数角度,纠正为正数角度
angel = angel + 360;
}
int imageWidth = bufferedImage.getWidth(null);
int imageHeight = bufferedImage.getHeight(null);
// 计算重新绘制图片的尺寸
Rectangle rectangle = calculatorRotatedSize(new Rectangle(new Dimension(imageWidth, imageHeight)), angel);
// 获取原始图片的透明度
int type = bufferedImage.getColorModel().getTransparency();
BufferedImage newImage = null;
newImage = new BufferedImage(rectangle.width, rectangle.height, type);
Graphics2D graphics = newImage.createGraphics();
// 平移位置
graphics.translate((rectangle.width - imageWidth) / 2, (rectangle.height - imageHeight) / 2);
// 旋转角度
graphics.rotate(Math.toRadians(angel), imageWidth / 2, imageHeight / 2);
// 绘图
graphics.drawImage(bufferedImage, null, null);
return newImage;
}
/**
* 计算旋转后的尺寸
*
* @param src
* @param angel
* @return
*/
private static Rectangle calculatorRotatedSize(Rectangle src, int angel) {
if (angel >= 90) {
if (angel / 90 % 2 == 1) {
int temp = src.height;
src.height = src.width;
src.width = temp;
}
angel = angel % 90;
}
double r = Math.sqrt(src.height * src.height + src.width * src.width) / 2;
double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r;
double angel_alpha = (Math.PI - Math.toRadians(angel)) / 2;
double angel_dalta_width = Math.atan((double) src.height / src.width);
double angel_dalta_height = Math.atan((double) src.width / src.height);
int len_dalta_width = (int) (len * Math.cos(Math.PI - angel_alpha - angel_dalta_width));
int len_dalta_height = (int) (len * Math.cos(Math.PI - angel_alpha - angel_dalta_height));
int des_width = src.width + len_dalta_width * 2;
int des_height = src.height + len_dalta_height * 2;
return new java.awt.Rectangle(new Dimension(des_width, des_height));
}
/**
* MultipartFile 转 File
*
* @param file
* @throws Exception
*/
public static File multipartFileToFile(MultipartFile file) throws Exception {
File toFile = null;
if (file.equals("") || file.getSize() <= 0) {
file = null;
} else {
InputStream ins = null;
ins = file.getInputStream();
toFile = new File(file.getOriginalFilename());
inputStreamToFile(ins, toFile);
ins.close();
}
return toFile;
}
//获取流文件
private static void inputStreamToFile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
相关推荐
Spring Boot集成Apache POI实现Word图片水印:原理、代码与避坑指南
在文档处理领域,为Word文档添加水印是常见的业务需求,用于标识文件状态、版权或归属。其核心原理在于理解.docx文件的OOXML结构,水印通常通过操作页眉(Header)并插入特定格式的绘图对象来实现。Apache POI作为Java生态中处理Office文档的主流开源库,提供了操作底层XML结构的能力,是实现自动化、批量化水印功能的技术基础。在工程实践中,开发者常面临XWPF API未直接提供水印方法、内存溢出(OutOfMemoryError)以及跨平台渲染兼容性等挑战。本文以Spring Boot项
java orientation_java解决手机上传竖拍照片旋转90\180\270度问题
com.drewnoakesmetadata-extractor2.11.0import java.awt.Dimension;import java.awt.Graphics2D;import java.awt.Rectangle;import java.awt.image.BufferedImage;import java.io.File;import javax.imageio.ImageI...
Spring Boot + Apache POI 实现Word文档后端加水印全攻略
在文档安全与防篡改领域,为Office文档添加水印是一项基础且关键的技术。其核心原理在于将水印信息直接嵌入文档的底层二进制结构,而非仅在前端进行视觉叠加,从而确保水印随文件流转而不可剥离。从技术实现层面,这通常涉及对文档格式标准的解析与操作。在Java生态中,Apache POI库是处理Microsoft Office文档(包括Word、Excel)的事实标准,它允许开发者以编程方式读写文档的各个组成部分。对于Word文档(.docx),其本质是一个遵循Open XML标准的ZIP压缩包,水印通常作为“衬于
Java 手机上传图片旋转解决并压缩上传笔记
Java,将上传图片,检查旋转,并压缩保存
PDF转图片技术实战:主流依赖库选型与性能优化指南
PDF转图片是文档处理中的基础技术,其核心原理是通过渲染引擎将PDF的矢量页面栅格化为像素图像。这项技术的价值在于实现文档内容的可视化与跨平台展示,广泛应用于在线预览、报告生成、OCR预处理等场景。在工程实践中,开发者常面临依赖库选型、渲染质量与性能平衡等挑战。本文聚焦于Apache PDFBox、pdf2image、PyMuPDF等主流工具,深入解析其内存管理、中文支持等关键问题,并提供高并发处理与Web集成的实战方案,帮助开发者构建稳定高效的PDF处理流水线。
Java旋转图片的功能实现
摘要:Java源码,图形操作,图片旋转 Java旋转图片的功能实现,是一个处理缓冲区中的图像数据的示例,即将缓冲区中的图像数据倒过来存储,这样得到的将是原来图像旋转180°后的效果。 运行环境:Java/Eclipse
Java实现图片无损任意角度旋转
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan 【前言】 在做项目的时候遇到一个业务需要对图片进行旋转,于是找到一个工具类,亲测有效;在此与大家共享,需要用时可以直接用哈! 【实战】 一、旋转工具类代码: package zh.test.utils; import java.awt.*; im...
矩阵束(Matrix Pencil)入门:从通信系统到控制理论,它为何是建模利器?
本文深入探讨矩阵束(Matrix Pencil)在通信系统与控制理论中的关键作用,揭示其作为复杂系统建模利器的独特价值。从MIMO系统的多径干扰分析到电力系统稳定性判据,矩阵束通过`A-λB`方程求解提供精准建模方案,显著提升5G通信和工业控制等领域的性能表现。
针对iphone手机拍照片旋转90度问题解决
/* 1、图片上传的方法 */ @RequestMapping(value = "/uploadPic", method = RequestMethod.POST) @ResponseBody public JsonResult upload(@RequestParam("file") MultipartFile[] files){ Boolean flag
Android 16(API 36)状态栏颜色适配全攻略:从沉浸式到自定义背景
本文全面解析Android 16(API 36)强制沉浸式状态栏带来的适配挑战,提供了从FrameLayout包裹法到动态修改Window背景色的核心解决方案。针对传统状态栏颜色设置失效问题,详细阐述了如何利用WindowInsets API实现自定义背景,并涵盖全屏模式、Fragment切换及第三方ROM兼容性等实战场景,为开发者提供一站式适配指南。
计算机组成原理 微程序控制器实验
微程序控制器实验 实验环境 计算机组成原理实验环境 实验目的 掌握微程序控制器的组成原理和工作过程。 理解微指令和微程序的概念,理解微指令与指令的区别与联系。 掌握指令操作码与控制存储器中微程序的对应方法。熟悉根据指令操作码从控制存储器中读出微程序的过程。 实验要求 做好实验预习,读懂实验电路图,熟悉实验元器件的功能特性和使用方法。 按照实验内容与步骤的要求,独立思考,认真仔细地完成实验。 写出实验报告。 实验电路
Java中图片压缩上传至MinIO服务器(4)
之前文章已经介绍了 MinIO 的环境搭建,已经对文件的上传下载方法,本篇文章一起与大家来学习图片压缩上传的方法 1、背景 最近客户总抱怨 APP 中图片显示较慢, 升级服务器带宽又没有多的预算,查看原因,是因为现在大家都是用的智能手机拍照,拍出来的照片小则 2-3 M,大则十几 M,所以导致图片显示较慢。思考再三,决定将图片进行压缩再上传图片服务器来解决图片显示慢的问题
ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)
萌新常用的都在这了,本萌新的模板集。
iOS系统上传图片,图片旋转解决方法:
iOS系统上传图片,图片旋转解决方法:图片exif信息相关包: com.drewnoakes metadata-extractor 2.10.1 import java.awt.AlphaComposite; import java.awt.Color; impo
全能扫描王的实现(python版本)- 目标检测图像矫正
全能扫描王python代码实现,可用于文件扫描或者是图像校正
一文说清STM32CubeMX中文汉化全流程(图解说明)
详细讲解STM32CubeMX中文汉化的完整流程,通过图文并茂的方式手把手教学,解决界面英文带来的使用障碍,让开发更高效。掌握stm32cubemx中文汉化技巧,提升嵌入式开发体验。
图片上传
这里是修真院后端小课堂,每篇分享文从 八个方面深度解析后端知识/技能,本篇分享的是: 【图片上传。】 大家好,我是IT修真院郑州分院第十期学员,一枚正直纯洁善良的JAVA程序员。 今天给大家分享一下,java任务扩展思考知识点——图片上传。 一、背景介绍 在开发过程中,不论是做网页还是APP,基本上都会有图片上传的业务需求,最典型的就是注册账号之后需要用户上传头像或者用户验证的时候上传身份证照片。...
小红书UID泄露风险揭秘:如何防止你的手机号被社工库关联(附防护指南)
本文揭示了小红书UID泄露的严重风险,详细解析了UID与手机号关联后被社工库利用的完整链条。通过分析黑产的数据整合技术,提供从基础到进阶的防护策略,包括密码管理、账号隔离和应急响应措施,帮助用户有效防范个人信息泄露风险。
java上传图片加水印_Spring Boot实现图片上传/加水印一把梭操作实例代码
概述很多网站的图片为了版权考虑都加有水印,尤其是那些图片类网站。自己正好最近和图片打交道比较多,因此就探索了一番基于 Spring Boot这把利器来实现从 图片上传 → 图片加水印 的一把梭操作!本文内容脑图如下:本文内容脑图搭建 Spring Boot基础工程过程不再赘述了,这里给出 pom中的关键依赖:org.springframework.bootspring-boot-starter-w...
计算机网络技术研究方向有哪些创新点
计算机网络技术方向的创新点众多,这些创新不仅推动了网络技术的不断发展和完善,还为用户提供了更高效、更安全、更便捷的网络服务。- 边缘计算是一种将计算和数据存储推向网络边缘的技术,通过将数据处理和分析的任务分散到网络的各个节点,降低了数据传输的延迟,提高了实时性。- 通过网络自动化工具和技术,可以实现网络配置的自动化、网络故障的自动诊断与修复等功能,降低了网络运维的复杂性和成本。- 通过引入人工智能技术,网络可以实现更智能的流量管理、故障预测和自动修复等功能,提高了网络的性能和稳定性。
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
java spring上传图片_基于Spring Boot实现图片上传/加水印一把梭操作
文章共 537字,阅读大约需要 2分钟 !概述很多网站的图片为了版权考虑都加有水印,尤其是那些图片类网站。自己正好最近和图片打交道比较多,因此就探索了一番基于 Spring Boot这把利器来实现从 图片上传 → 图片加水印 的一把梭操作!本文内容脑图如下: 搭建 Spring Boot基础工程过程不再赘述了,这里给出 pom中的关键依赖:org.springframework.bootspri...
lwip-2.0.3
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
避坑指南:MultipartFile转换时内存溢出的5种解决方案(含PHPStudy环境配置)
本文深入探讨了在Java文件处理中,将本地文件转换为MultipartFile时常见的内存溢出问题及其解决方案。文章详细分析了DiskFileItemFactory的内存管理机制,并提供了五种针对性的优化策略,包括动态阈值计算、流式处理、临时文件生命周期管理、连接池应用以及监控预警,旨在帮助开发者构建高效、稳定的文件处理流程。
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
基于Spring Boot实现图片上传/加水印一把梭操作
文章共 537字,阅读大约需要 2分钟 ! 概述 很多网站的图片为了版权考虑都加有水印,尤其是那些图片类网站。自己正好最近和图片打交道比较多,因此就探索了一番基于 Spring Boot这把利器来实现从 图片上传 → 图片加水印 的一把梭操作! 注: 本文首发于 My Personal Blog:程序羊,欢迎光临 小站 本文内容脑图如下: 搭建...
美图秀秀java代码,【Java】SpringMvc整合美图秀秀M4(头像编辑器)
美图秀秀M4 头像编辑器是一款集旋转裁剪、特效美化、人像美容为一体的在线头像编辑工具。适用于有设置头像需求的BBS、SNS、微博和社区等Web产品。美图秀秀,JAVA提供了示例可参考,流式上传 或者 标准表单上传,于是采用标准表单上传。List items = upload.parseRequest(request);//得到所有的文件复制代码以上为截取部分代码,美图的API采用的common-f...
Java后端图片处理实战:从Thumbnailator库使用到高并发服务优化
数字图像处理是后端开发中的常见需求,其核心在于理解图片的编码原理与色彩空间。图片格式如JPEG、PNG、WebP等,通过不同的压缩算法在画质与体积间取得平衡,而sRGB等色彩空间则决定了颜色的准确呈现。掌握这些原理,对于构建稳定高效的图片服务至关重要,能够避免常见的模糊、色彩失真等问题。在Java生态中,Thumbnailator库以其简洁的API和良好的默认处理,成为实现缩放、裁剪、水印等操作的利器。特别是在用户头像生成、内容管理系统等应用场景中,结合异步处理与缓存策略,可以显著提升高并发下的服务性能与稳
基于CNN的Web端盆栽识别系统设计与实现
卷积神经网络(CNN)作为计算机视觉领域的核心技术,通过局部感知和权值共享机制高效提取图像特征。在Web应用中集成CNN模型面临模型轻量化、前后端协同等工程挑战。本文以盆栽识别为应用场景,详细解析了从TensorFlow模型训练到Spring Boot+Vue.js全栈部署的完整技术方案,重点解决了模型量化、大文件分片上传等核心问题。通过量化INT8技术将模型体积压缩75%,结合Redis缓存使系统吞吐量提升至75RPS,为类似图像识别Web应用提供了可复用的架构范式。
373



被折叠的 条评论
为什么被折叠?



