图片类型转化---模拟某wps

        文件上传功能的深入探讨

        文件上传是Web应用程序中常见的功能,它允许用户将本地文件通过Web界面发送到服务器。在Flask中,这通常是通过处理表单数据来实现的。表单必须设置`enctype`为`multipart/form-data`,这样浏览器才能将文件作为多部分消息发送。

        在后端,Flask使用`request.files`对象来访问上传的文件。每个上传的文件都是一个`werkzeug.datastructures.FileStorage`对象,它提供了文件流、文件名和其他元数据。

        为了确保上传的文件是图像,并且是允许的格式,应用程序使用了一个允许的扩展名集合。这个集合在代码中定义,并在文件上传时进行检查。如果文件扩展名不在允许的列表中,应用程序将拒绝上传并给出相应的反馈。

        文件类型检查的安全性考虑

        在Web应用程序中,仅仅检查文件扩展名是不够的,因为用户可以轻易地修改它。更安全的做法是检查文件的内容,确定它是否真的是所声称的格式。这可以通过使用文件签名或魔术数字来实现,这些是文件开头的几个字节,用于标识文件类型。

         图像处理的复杂性

        图像处理是一个复杂的领域,涉及到像素操作、颜色空间转换、压缩和其他许多因素。Pillow库提供了许多工具来处理这些任务。例如,转换图像模式是一个常见的需求,因为不同的图像格式支持不同的颜色模式。JPEG格式不支持透明度,因此需要将图像转换为RGB模式。

         文件保存的最佳实践

        在服务器上保存文件时,需要考虑文件系统的组织、文件名的安全性和性能。使用`os`模块可以创建目录、检查路径是否存在等。此外,使用`secure_filename`函数可以确保文件名不会包含危险的路径,从而防止目录遍历攻击。

         反馈信息的重要性

        用户界面应该提供清晰的反馈信息,让用户知道他们的操作是否成功。在Web应用程序中,这通常涉及到在页面上显示消息或重定向到另一个页面。反馈信息应该及时、准确,并且提供足够的信息,让用户了解下一步应该做什么。

        技术背后的原理

        **Flask**:Flask是一个微框架,它鼓励使用简单的组件来构建复杂的应用程序。它的核心是易于理解和扩展,这使得它成为学习Web开发的好选择。
        - **HTML/CSS**:HTML定义了网页的结构,而CSS则负责样式。它们是Web开发的基石,允许开发者创建和设计用户界面。
        - **Pillow (PIL)**:Pillow是Python Imaging Library (PIL) 的一个分支,它增加了对Python 3的支持,并修复了一些原始PIL中的问题。它提供了广泛的图像处理功能。
        - **Werkzeug**:Werkzeug是一个强大的WSGI工具包,它提供了许多实用工具,包括请求处理、响应对象和文件上传处理。
        - **操作系统文件操作**:Python的`os`模块提供了与操作系统交互的功能,包括文件和目录管理。它是一个低级的模块,允许开发者执行文件系统操作。

cc.py

from flask import Flask, request, render_template, redirect, url_for
from werkzeug.utils import secure_filename
from PIL import Image
import osapp = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads/'  # 设置上传文件夹
app.config['ALLOWED_EXTENSIONS'] = {'png', 'jpg', 'jpeg', 'bmp', 'gif', 'ico', 'xbm', 'xpm', 'pdf'}  # 允许的文件扩展名# 确保上传文件夹存在
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)def allowed_file(filename):return '.' in filename and \filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']def convert_image_mode(img, target_mode):if img.mode != target_mode:# 转换图片模式img = img.convert(target_mode)return imgdef secure_chinese_filename(filename):if isinstance(filename, str):return filenameelse:return filename.decode('utf-8')@app.route('/', methods=['GET', 'POST'])
def upload_file():if request.method == 'POST':if 'file' not in request.files:return redirect(request.url)file = request.files['file']new_filename = request.form.get('new_filename', None)  # 获取新的文件名if file.filename == '' or new_filename is None:return redirect(request.url)if file and allowed_file(file.filename):filename = secure_filename(file.filename)img = Image.open(file)save_path = request.form.get('save_path', 'default_path')format = request.form.get('format', 'JPEG').lower()# 创建保存目录save_path = os.path.join(app.config['UPLOAD_FOLDER'], save_path)os.makedirs(save_path, exist_ok=True)# 重命名文件,支持中文if new_filename:new_filename = secure_chinese_filename(new_filename)  # 确保文件名安全并支持中文filename = new_filename + '.' + format# 保存图片到指定格式和路径save_path = os.path.join(save_path, filename)img.save(save_path, format=format)return f'File successfully saved to {save_path}'return render_template('cc.html')if __name__ == '__main__':app.run(debug=True)

cc.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Image Converter</title>
</head>
<body><h1>Image Converter</h1><form action="/" method="post" enctype="multipart/form-data"><input type="file" name="file" required><select name="format" required><option value="PNG">PNG</option><option value="JPEG">JPEG</option><option value="GIF">GIF</option><option value="BMP">BMP</option><option value="ICO">ICO</option><option value="XBM">XBM</option><option value="XPM">XPM</option><option value="PDF">PDF</option></select><input type="text" name="save_path" placeholder="Enter save path (optional)"><input type="text" name="new_filename" placeholder="Enter new filename (without extension, support Chinese)"><input type="submit" value="Upload, Rename, and Convert"></form>
</body>
</html>

结果

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

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

相关文章

GitLab CI_CD 从入门到实战笔记

第1章 认识GitLab CI/CD 1.3 GitLab CI/CD的几个基本概念 GitLab CI/CD由以下两部分构成。 &#xff08;1&#xff09;运行流水线的环境。它是由GitLab Runner提供的&#xff0c;这是一个由GitLab开发的开源软件包&#xff0c;要搭建GitLab CI/CD就必须安装它&#xff0c;因…

实战分享:我是如何挖到CSDN漏洞的?

文章目录 前言一、过程二、总结《Windows信息安全和网络攻防》——清华大学出版社 前言 CxxN是国内很出名的博客平台&#xff0c;用户量非常大&#xff0c;注册用户据说有1个亿&#xff1f;(官方写的)本次我发现的漏洞详情是可以通过用户的id直接获取用户完整的手机号&#xf…

【深度学习】(2)--PyTorch框架认识

文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader&#xff08;数据加载器&#xff09;4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…

第二届”青春同行 共享未来“两岸新媒体创享活动在京开启

9月6日&#xff0c;第二届“青春同行 共享未来”两岸新媒体创享活动在北京盛大开启。本次活动旨在促进两岸青年文化交流与合作&#xff0c;共同探索新媒体时代两岸文化与经济的创新与发展新路径。爱迪斯通董事长吴明勳先生作为特邀嘉宾出席活动并发表演讲&#xff0c;在演讲中吴…

RK3568部署DOCKER启动服务器失败解决办法

按照上文的方法部署完DOCKER之后&#xff0c;启动服务异常&#xff0c;查阅网络相关资源&#xff0c;解决方案如下&#xff1a; 修改/源码/kernel/arch/arm64/configs/OK3568-C-linux_defconfig&#xff0c;在最后添加 CONFIG_MEMCGy CONFIG_VETHy CONFIG_BRIDGEy CONFIG_BRID…

算法训练——day16快乐数

202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为…

2024年 现象级的商业模式 上海某店!为何能火爆出圈!

大家好&#xff0c;我是吴军&#xff0c;目前在一家备受瞩目的软件开发公司担任产品管理的重要角色。 当前&#xff0c;市场正经历着商业模式的深刻变革&#xff0c;一种创新的商业模式如潮水般涌现&#xff0c;它巧妙地为消费者编织了省钱的网络&#xff0c;同时也为商家铺设了…

软考架构-面向服务的架构风格

一、SOA 1、概念 面向服务开发&#xff0c;服务之间通过简单、精确定义接口进行通信&#xff0c;不涉及底层编程接口和通信模型。多个服务挂载在ESB&#xff08;企业服务总线&#xff09;上进行通信。 2、特征 可从企业外部访问、随时可用&#xff08;服务请求能被及时响应…

比较推荐哪种可视耳勺?市场高口碑可视耳勺推荐!

很多人仍在使用棉签或者传统金属挖耳勺进行耳部清洁&#xff0c;但往往会清洁不干净或者操作失误引发意外。今天小编要给大家介绍一款新型的挖耳工具---可视耳勺&#xff0c;它能通过内置摄像头进入耳朵查看耳朵内部情况&#xff0c;看清楚耳垢的位置&#xff0c;能清洁干净耳朵…

saltstack高级用法

一、saltstack的高级用法 一、job管理 1、job简介 Jid&#xff1a;job id&#xff0c;格式为%Y%m%d%H%M%S%fmaster在下发指令消息时&#xff0c;会附带上产生的Jid&#xff0c;minion在接收到指令开始执行时&#xff0c;会在本地的cachedir&#xff08;默认是/var/cache/salt/…

人工智能开发实战matplotlib库应用基础

内容导读 matplotlib简介绘制直方图绘制撒点图 一、matplotlib简介 matplotlib是一个Python 2D绘图库&#xff0c;它以多种硬拷贝格式和跨平台的交互式环境生成高质量的图形。 matplotlib 尝试使容易的事情变得更容易&#xff0c;使困难的事情变得可能。 我们只需几行代码…

C语言深入理解指针(二)

目录 指针运算指针-整数指针-指针指针的关系运算 野指针野指针成因指针未初始化指针越界访问指针指向的空间释放 如何规避野指针指针初始化注意指针越界指针不使用时就用NULL避免返回局部变量的地址 assert断言指针的使用和传址调用传址调用例子&#xff08;strlen函数的实现&a…

SSC338D/SSC338Q CA7*2+IPU5M/Multi-sensorISP: HDR/3DNR

SSC338D/SSC338Q系列产品是高度集成的多媒体片上系统&#xff08;SoC&#xff09;产品&#xff0c;适用于IP摄像机、车载摄像机和USB摄像机等高分辨率智能视频录制应用。该芯片包括32位双核RISC处理器、高级图像信号处理器&#xff08;ISP&#xff09;、高性能MJPEG/H.264/H.26…

idear导入他人项目如何快速运行

最近idear经常导入别人的项目&#xff0c;结果永远在加载依赖项。网上查了一堆资料&#xff0c;什么jdk问题&#xff0c;环境变量问题&#xff0c;maven仓库路径问题&#xff0c;总之就是没啥用。那有没有什么简单粗暴的办法&#xff0c;能够导入项目后快速运行呢。 解决方法&a…

MATLAB 2024a安装包下载及安装教程、超详细步骤

[安装环境]: Win 11/Win 10 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等。MATLAB的基本数据单位是矩阵&#xff0c;它的指令表达式与数学…

Git常用指令大全详解

Git常用指令大全详解 Git&#xff0c;作为目前最流行的分布式版本控制系统&#xff0c;其强大的功能和灵活性为开发者提供了极大的便利。无论是个人项目还是团队协作&#xff0c;Git都扮演着不可或缺的角色。本文将详细总结Git的常用指令&#xff0c;帮助大家更好地掌握这一工…

九大B端开源组件库:总览篇,B端设计绕不开的话题。

如果你经常接触B端设计&#xff0c;开源组件库是各个绕不开的话题&#xff0c;市场上的组件库林林总总&#xff0c;本次做一个总体介绍&#xff0c;后面有机会再分开详细介绍。 一、最常用的组件库&#xff0c;推出的时间。 自Bootstrap诞生后&#xff0c;B端PC中后台组件库如…

爬虫代理API的全面解析:让数据抓取更高效

在大数据时代&#xff0c;网络爬虫已经成为收集和分析数据的重要工具。然而&#xff0c;频繁的请求会导致IP被封禁&#xff0c;这时候爬虫代理API就显得尤为重要。本文将详细介绍爬虫代理API的作用、优势及如何使用&#xff0c;帮助你更高效地进行数据抓取。 什么是爬虫代理AP…

C++刷怪笼(5)内存管理

一.前言 学习完类和对象之后&#xff0c;我们对C有了基本的了解&#xff0c;但是我们对于C的学习&#xff0c;除了广度&#xff0c;还需要深度&#xff0c;今天让我们走进底层&#xff0c;看看C对其内存是如何进行管理的。 二.正文 我们对这段代码进行详细的分析如下图&#…

技术美术一百问(02)

问题 前向渲染和延迟渲染的流程 前向渲染和延迟渲染的区别 G-Buffer是什么 前向渲染和延迟渲染各自擅长的方向总结 GPU pipeline是怎么样的 Tessellation的三个阶段 什么是图形渲染API? 常见的图形渲染API有哪些&#xff1f; 答案 1.前向渲染和延迟渲染的流程 【例图…