破解tinypng文件上传的限制

article/2025/9/9 4:56:38

简单破解tinypng文件上传的限制

/** * 帮助文档* -------* * 获取帮助* 指令 -h* * 获取命令执行文件夹 * 指令 -f * 参数 ./* 必填,待处理的图片文件夹* * 获取是否深度递归处理图片文件夹* 指令 -deep* 可选,默认不深度递归* * 命令行脚本参考示例* > node ./脚本.js -f ./图片文件夹 -deep*  */const fs = require('fs');const path = require('path');const https = require('https');const URL = require('url').URL;const EventEmitter = require('events');const err = msg => new EventEmitter().emit('error', msg);if (getHelp()) return false;const conf = {files: [],EntryFolder: getEntryFolder(),DeepLoop: getDeepLoop(),Exts: ['.jpg', '.png'],Max: 5200000, // 5MB == 5242848.754299136}fileFilter(conf.EntryFolder)console.log("本次执行脚本的配置:", conf);console.log("等待处理文件的数量:", conf.files.length)conf.files.forEach(img => fileUpload(img)); 工具函数/*** 获取帮助命令* 指令 -h*/function getHelp() {let i = process.argv.findIndex(i => i === "-h");if (i !== -1) {return true;}}/*** 获取命令执行文件夹 * 指令 -f * 参数 ./* 必填,待处理的图片文件夹*/function getEntryFolder() {let i = process.argv.findIndex(i => i === "-f");if (i === -1 || !process.argv[i + 1]) return err('获取命令执行文件夹:失败');return process.argv[i + 1];}/*** 获取是否深度递归处理图片文件夹* 指令 -deep* 可选,默认不深度递归*/function getDeepLoop() {return process.argv.findIndex(i => i === "-deep") !== -1;}/*** 过滤待处理文件夹,得到待处理文件列表* @param {*} folder 待处理文件夹* @param {*} files 待处理文件列表*/function fileFilter(folder) {// 读取文件夹fs.readdirSync(folder).forEach(file => {let fullFilePath = path.join(folder, file)// 读取文件信息let fileStat = fs.statSync(fullFilePath);// 过滤文件安全性/大小限制/后缀名if (fileStat.size <= conf.Max && fileStat.isFile() && conf.Exts.includes(path.extname(file))) conf.files.push(fullFilePath);// 是都要深度递归处理文件夹else if (conf.DeepLoop && fileStat.isDirectory()) fileFilter(fullFilePath);});}/*** TinyPng 远程压缩 HTTPS 请求的配置生成方法*/function getAjaxOptions() {return {method: 'POST',hostname: 'tinypng.com',path: '/web/shrink',headers: {rejectUnauthorized: false,"X-Forwarded-For": Array(4).fill(1).map(() => parseInt(Math.random() * 254 + 1)).join('.'),'Postman-Token': Date.now(),'Cache-Control': 'no-cache','Content-Type': 'application/x-www-form-urlencoded','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}}}/*** TinyPng 远程压缩 HTTPS 请求* @param {string} img 待处理的文件* @success {*              "input": { "size": 887, "type": "image/png" },*              "output": { "size": 785, "type": "image/png", "width": 81, "height": 81, "ratio": 0.885, "url": "https://tinypng.com/web/output/7aztz90nq5p9545zch8gjzqg5ubdatd6" }*           }* @error  {"error": "Bad request", "message" : "Request is invalid"}*/function fileUpload(imgPath) {let req = https.request(getAjaxOptions(), (res) => {res.on('data', buf => {let obj = JSON.parse(buf.toString());if (obj.error) console.log(`压缩失败!\n 当前文件:${imgPath} \n ${obj.message}`);else fileUpdate(imgPath, obj);});});req.write(fs.readFileSync(imgPath), 'binary');req.on('error', e => console.error(`请求错误! \n 当前文件:${imgPath} \n`, e));req.end();}// 该方法被循环调用,请求图片数据function fileUpdate(entryImgPath, obj) {let options = new URL(obj.output.url);let req = https.request(options, res => {let body = '';res.setEncoding('binary');res.on('data', (data) => body += data);res.on('end', () => {fs.writeFile(entryImgPath, body, 'binary', err => {if (err) return console.error(err);let log = "压缩成功"log += `优化比例: ${ (( 1 - obj.output.ratio) * 100).toFixed(2) }%`log += `原始大小: ${ (obj.input.size / 1024).toFixed(2) }KB`log += `压缩大小: ${ (obj.output.size / 1024).toFixed(2) }KB`log += `文件:${entryImgPath}`console.log(log);});});});req.on('error', e => console.error(e));req.end();}// node ./tinypng.js -f ./static/smp/m/course_task

复制上面的代码,直接在node环境下运行命令: node 脚本.js -f 图片文件夹路径
制作不易,觉得对你有帮助,可以请作者喝杯咖啡。
有不懂可以加作者微信探讨:lfj990319
在这里插入图片描述


http://chatgpt.dhexx.cn/article/rLkCumil.shtml

相关文章

TinyPNG批量压缩工具脚本Python

TinyPNG官网: https://tinypng.com/ TinyPNG是目前为止最为欣赏的图片压缩工具, 图片压缩比截图 1经过ps压缩之后,还能减少50%以上的体积,肉眼居然一点看不出压缩模糊的痕迹; 2相比于jpg,对png透明的图片,体积压缩更为出众; 3为开发者提供了api接口,支持多种后端语言。…

super-tinypng压缩图片

使用快捷键WinR&#xff0c;输入cmd&#xff0c;进入命令行 安装super-tinypng插件 npm i super-tinypng -g在图片文件夹输入该命令 super-tinypng压缩完后会生成一个output文件夹&#xff0c;里面是压缩后的图片

TinyPNG

TinyPNG使用智能有损压缩技术来减少*PNG文件的文件大小。通过选择性地减少图像中的颜色数量&#xff0c;存储数据所需的字节更少。PNG很有用&#xff0c;因为它是唯一可以存储部分透明图像的广泛支持的格式。格式使用压缩&#xff0c;但文件仍然很大。使用TinyPNG缩小应用和网站…

TinyPng图片压缩的正确打开方式

https://tinypng.com/ TinyPNG使用智能的「有损压缩技术」来减少WEBP、JPEG和PNG文件的文件大小。通过选择性地减少图像中的「颜色数量」&#xff0c;使用更少的字节来存储数据。这种效果几乎是看不见的&#xff0c;但在文件大小上有非常大的差别。 使用过TinyPNG的都知道&…

tinypng注册

首先你得用谷歌浏览器&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xf…

TinyPNG 智能PNG和JPEG图片压缩

TinyPNG Smart PNG and JPEG compression &#xff08;English&#xff09; TinyPNG 智能PNG和JPEG图片压缩&#xff08;中文版&#xff09; TinyPNG做了什么&#xff1f; TinyPNG使用智能有损压缩技术将您的PNG文件的文件大小降低。 通过选择性的减少图片中的颜色&#xff0…

使用TinyPNG API压缩图片

使用TinyPNG API压缩图片 在撰写论文的时候&#xff0c;美观&#xff0c;大气&#xff0c;上档次的图标能够很好地给自己的论文加分&#xff0c;好的可视化结果也能够让审稿人赏心悦目。但是有时候在可视化图片的时候有可能原始图像过大从而很占内存&#xff1b;这时候就希望能…

FME读写cass数据的方案及操作流程

FME读写cass数据的方案及操作流程 一。CASS数据转换&#xff08;一&#xff09;读取南方CASS数据 南方CASS数据采用AutoCAD的DWG、DXF文件方式进行存储&#xff0c;用FME可以直接对DWG\DXF文件进行读取&#xff0c;但FME不能识别CASS扩展属性信息。在FME WorkBench中无法看到CA…

FME性能调整

FME性能调整 原文地址&#xff1a; https://knowledge.safe.com/content/kbentry/579/performance-tuning-fme.html 一、要素缓存 要素缓存&#xff08;或在FME2017及以下版本中使用“全部检查运行”—Run with Full Inspection&#xff09;允许你存储转换的中间结果并进行检…

【FME EXCEL】FME玩转EXCEL小记——不定期更新

目录 前言 本文记述FME使用过程中&#xff0c;对EXCEL操控心得&#xff0c;皆为平时的有感而发&#xff0c;故会不定时的更新。 模版的定义与使用 有如下一份成绩表&#xff0c;先存在两个问题&#xff0c;一个是所有同学的成绩少加了5分&#xff0c;另一个是登记表的位置不…

FME2019试用过程

FME2019试用过程 FME2019安装过程安装FME License安装FME Desktop FME2019安装过程 安装FME License AMPED —— 是 License 软件&#xff0c;先进入安这个 双击运行 一路安装 安完以后会弹出一个 hostid 的文本文件&#xff0c;如果没有去License的安装目录找 计算机名 网卡…

【FME小计】关于用户参数的设置

工作的时候遇到用户参数相关的需求&#xff1a;用户选择特定年份的时候&#xff0c;就运行特定年份数据。 该项需求的实现有两种方案&#xff1a; 使用Choice with Alias&#xff08;带别名的选择&#xff09;&#xff0c;然后将该参数关联到数据表上&#xff08;Feature to Re…

FME数据处理04:面自相交拓扑检查

在ArcGIS中仅提供了线要素的自相交拓扑检查,并未找到关于面要素自相交的相关表述;本文结合FME2019。列举了几种面自相交的情形,并介绍了FME中三个转换器及其设置方法。 关于ArcEngine的拓扑检查接口,可以参见基于C#的ArcEngine二次开发22:要素拓扑检查_小薛引路的博客-CS…

FME数据处理03:合并相接的线要素

1 问题描述 给定如下数据集: 上图中,选中的三条线段满足相接关系,但是是断开的;我们想将它们在断点处合并起来。 2 FME流程 主要是读取shp文件,调用LineCombiner转换器,将各线段从线段的相接点处连接起来。 Takes lines and connects them to form longer lines. Each…

FME动态转换

FME动态转换 什么是动态转换创建动态转换动态读模块动态写模块 动态结构处理动态结构动态要素类型动态属性结构几何定义 B站视频凑合看&#xff1a; 创建动态转换 结构处理(要素&#xff0c;属性&#xff0c;几何类型) 什么是动态转换 大多数转换要考虑源数据的结构&#xff…

FME助力新型基础测绘之存量测绘成果数据转换地理实体

​ 目前&#xff0c;新型基础测绘建设正在如火如荼地进行中&#xff0c;它是对传统基础测绘业务的转型升级&#xff0c;是测绘地理信息服务的发展方向和基本模式。要想充分了解新型基础测绘建设的核心内容&#xff0c;地理实体是必不可少的一个关键要素。 地理实体是指现实世…

使用FME 批量OSGB转FBX(OBJ) (亲测)

首先感谢这个UP主&#xff08;这种好视频&#xff0c;必须支持&#xff09;&#xff1a;OSGB单体模型批量转FBX&#xff0c;并保留原有文件目录_哔哩哔哩_bilibili 视频地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/18JCTpgAhWT1l5x8zJW9q0A?pwdr25e 提取码&am…

FME自动实现CAD转PDF的几种方式——以标准房屋建筑面积测算表为例

买房 对许多人来说都是人生大事之一&#xff0c; 关乎着定居、关乎着家庭、关乎着人生的再进一步。 要说买房以后最期待的事情是什么&#xff1f; ——拥有红本本&#xff0c;肯定是最重要的一项。 细心的你不难发现&#xff0c;房本除了房屋信息、房主信息以外还包含房屋平…

FME在变更地类流向统计中的应用

“国土变更调查”是全面查清我国土地利用状况&#xff0c;掌握详实准确的土地基础数据&#xff0c;摸清家底&#xff0c;提高土地资源的信息化管理和社会化运用&#xff0c;保障我国国民经济平稳健康发展&#xff0c;以及促进国土资源的合理开发和可持续利用的一项年度工作。 …

基于FME实现不动产数据一键导出自然资源部汇交格式

基于FME实现不动产数据一键导出 自然资源部汇交格式 自2015年中华人民共和国国务院令第656号签《不动产登记条例施行》施行。各省市区县在2017年相继成立不动产登记机构&#xff0c;整合原有国土部门土地登记。房管部门房产登记&#xff0c;林业部门的林业登记&#xff0c;实…