当前位置: 首页 > news >正文

C# 图片按比例进行压缩

1、对图片进行压缩,保存在本地

对于一个200k的png文件按0.6的缩放比例进行压缩,压缩后的大小为20k左右

对于一个80k的jpg文件按0.6的缩放比例压缩,压缩后为13k左右

public void imageZoom(string name, Double zoomScale){Bitmap btImage = new Bitmap(name);Image serverImage = btImage;int width = (int)(serverImage.Width * zoomScale);int height = (int)(serverImage.Height * zoomScale);//画板大小int finalWidth = width, finalHeight = height;int srcImageWidth = serverImage.Width;int srcImageHeight = serverImage.Height;if (srcImageWidth > srcImageHeight){finalHeight = srcImageHeight * width / srcImageWidth;}else{finalWidth = srcImageWidth * height / srcImageHeight;}//新建一个bmp图片Image newImage = new Bitmap(width, height);//新建一个画板Graphics g = Graphics.FromImage(newImage);//设置高质量插值法g.InterpolationMode = InterpolationMode.High;//设置高质量,低速度呈现平滑程度g.SmoothingMode = SmoothingMode.HighQuality;//清空画布并以透明背景色填充g.Clear(Color.White);//在指定位置并且按指定大小绘制原图片的指定部分g.DrawImage(serverImage, new Rectangle((width - finalWidth) / 2, (height - finalHeight) / 2, finalWidth, finalHeight), 0, 0, srcImageWidth, srcImageHeight, GraphicsUnit.Pixel);//以jpg格式保存缩略图MemoryStream msSaveImage = new MemoryStream();newImage.Save(@"D:\1.png",ImageFormat.Jpeg);serverImage.Dispose();newImage.Dispose();g.Dispose();}
 private void button1_Click(object sender, EventArgs e){OpenFileDialog ofd = new OpenFileDialog();ofd.ShowDialog();imageZoom(ofd.FileName,0.6);}

2、对图片进行压缩,转换成Base64后进行传输,可测量字符串长度来对比

对一张图片转换成base64后,测量base64字符串的长度,对于一个80k的图片,压缩前长度为110800多,压缩后长度不到20000,减小了很多,便于传输。

网上有关于对字符串进行压缩的,那是针对纯字符串,对于已经转换成base64的字符串,使用GZipStream类来压缩数据基本上没有效果。

public  string ImageToBase64(string name,Double zoomScale){Bitmap btImage = new Bitmap(name);Image serverImage = btImage;int width = (int)(serverImage.Width * zoomScale);int height = (int)(serverImage.Height * zoomScale);//画板大小int finalWidth = width, finalHeight = height;int srcImageWidth = serverImage.Width;int srcImageHeight = serverImage.Height;if (srcImageWidth > srcImageHeight){finalHeight = srcImageHeight * width / srcImageWidth;}else{finalWidth = srcImageWidth * height / srcImageHeight;}//新建一个bmp图片Image newImage = new Bitmap(width, height);//新建一个画板Graphics g = Graphics.FromImage(newImage);//设置高质量插值法g.InterpolationMode = InterpolationMode.High;//设置高质量,低速度呈现平滑程度g.SmoothingMode = SmoothingMode.HighQuality;//清空画布并以透明背景色填充g.Clear(Color.White);//在指定位置并且按指定大小绘制原图片的指定部分g.DrawImage(serverImage, new Rectangle((width - finalWidth) / 2, (height - finalHeight) / 2, finalWidth, finalHeight), 0, 0, srcImageWidth, srcImageHeight, GraphicsUnit.Pixel);//以jpg格式保存缩略图MemoryStream msSaveImage = new MemoryStream();newImage.Save(msSaveImage, ImageFormat.Jpeg);serverImage.Dispose();newImage.Dispose();g.Dispose();byte[] imageBytes = msSaveImage.ToArray();msSaveImage.Close();return Convert.ToBase64String(imageBytes);}

相关文章:

C# 图片按比例进行压缩

1、对图片进行压缩,保存在本地 对于一个200k的png文件按0.6的缩放比例进行压缩,压缩后的大小为20k左右 对于一个80k的jpg文件按0.6的缩放比例压缩,压缩后为13k左右 public void imageZoom(string name, Double zoomScale){Bitmap btImage …...

猜猜 JavaScript 输出:(! + [] + [] + ![]).length

一起猜 最近看到一个很有意思的题,直接来看,下面这段代码的打印结果是什么? console.log((! [] [] ![]).length) 猜猜看,你的答案是什么,打在评论区。 我的答案是 undefined,正如我的英文名 为什么呢&a…...

MTK Android12静默安装接口

该文档就是在android12系统上提供一个广播接收器,app端发送一个广播,并且带入apk的地址就可以实现安装 1、广播注册 frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java 首先要导入的依赖 import android.app.P…...

基于电容电流前馈与电网电压全前馈的三相LCL并网逆变器谐波抑制Simulink仿真

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Python数据攻略-Pandas与统计数据分析

统计学在数据分析中到底有多重要?在数据分析的世界里,统计学扮演着一角色。想象一下你是《三国志》游戏的数据分析师,任务是找出哪个武将最受玩家欢迎,哪些战役最具挑战性等。 你怎么做呢?这就需要统计学的力量了。 文章目录 基础统计方法描述性统计方差和标准差相关性和…...

【gcc】RtpTransportControllerSend学习笔记 1

本文是大神 https://www.cnblogs.com/ishen 的文章的学习笔记。主要是大神文章: webrtc源码分析(8)-拥塞控制(上)-码率预估 的学习笔记。大神的webrtc源码分析(8)-拥塞控制(上)-码率预估 详尽而具体,堪称神作。因为直接看大神的文章,自己啥也没记住,所以同时跟着看代码。跟…...

若依分离版-前端使用

1 执行 npm install --registryhttps://registry.npm.taobao.org,报错信息如下 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: ktg-mes-ui3.8.2 npm ERR! Found: vue2.6.12 npm ERR! node_modu…...

微信小程序-2

微信开发文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ 一、app.js中的生命周期函数与globalData(全局变量) 指南 - - - 小程序框架 - - - 注册小程序 删除app.js里的东西,输入App回车,调用生命周期 选项 - - - 重新打开此项目…...

卷积神经网络的发展历史-ResNet

ResNet的产生 2015 年,Kaiming He 提出了ResNet(拿到了 2016 年 CVPR Best Paper Award),不仅解决了神经网络中的退化问题还在同年的ILSVRC和COCO 竞赛横扫竞争对手,分别拿下分类、定位、检测、分割任务的第一名。 R…...

基于瞬时无功功率ip-iq的谐波信号检测Simulink仿真

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

node安装,nvm管理器

一、下载nvm,nvm-setup.exe https://github.com/coreybutler/nvm-windows/releases 二、配置NodeJS下载代理镜像(可选) 可以在NVM安装根目录下的setting.txt文件中,配置NodeJS下载代理镜像,解决在线安装NodeJS时速度…...

华为云云耀云服务器L实例评测|Ubuntu云锁防火墙安装搭建使用

华为云云耀云服务器L实例评测|Ubuntu安装云锁防火墙对抗服务器入侵和网络攻击 1.前言概述 华为云耀云服务器L实例是新一代开箱即用、面向中小企业和开发者打造的全新轻量应用云服务器。多种产品规格,满足您对成本、性能及技术创新的诉求。云耀云服务器L…...

C# OpenCvSharp 实现迷宫解密

效果 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Windows.Forms;namespace OpenCvSharp_实现迷宫解密 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e…...

趣味工具箱小程序源码

趣味工具箱小程序源码,支持功能去水印,精选壁纸,图片压缩,文字生成二维码,图片加水印,模拟来电,手持弹幕,掷骰子…等 使用小工具,一个小程序有几十个功能。 源码下载&am…...

互联网Java工程师面试题·Redis 篇·第二弹

目录 16、Redis 集群方案什么情况下会导致整个集群不可用? 17、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 18、Jedis 与 Redisson 对比有什么优缺点? 19、Redis 如何设置密码及验证密码? 20、说说 Redis…...

FreeRTOS入门教程(信号量的概念及API函数使用)

文章目录 前言一、什么是信号量二、信号量种类和对比三、信号量和队列的区别四、信号量相关的函数1.创建函数2.删除函数3.获取和释放信号量函数 总结 前言 本篇文章正式带大家开始学习什么是信号量,并且掌握信号量函数的基本使用方法,并且将和队列进行一…...

简易版Pycharm(2023)+Conda开发环境配置教程

困 扰 不知道为什么,自从Pycharm更新了新的版本以后,在Pycharm中为项目工程配置Python解释器环境时,总是不能像以前那么方便的配置。 比如,当前Conda中有十个不同的开发环境,每个环境一个名称,比如&#x…...

深入浅出,SpringBoot整合Quartz实现定时任务与Redis健康检测(二)

前言 在上一篇深入浅出,SpringBoot整合Quartz实现定时任务与Redis健康检测(一)_往事如烟隔多年的博客-CSDN博客 文章中对SpringBoot整合Quartz做了初步的介绍以及提供了一个基本的使用例子,因为实际各自的需求任务不尽相同因此并…...

小谈设计模式(22)—单例模式

小谈设计模式(22)—单例模式 专栏介绍专栏地址专栏介绍 单例模式点睛所在优缺点分析优点确保只有一个实例全局访问点节省资源线程安全 缺点难以扩展对象的生命周期单一职责原则隐藏依赖关系 Java程序实例实例a分析实例b,更安全分析优化 ——“…...

华为OD机考算法题:分班

题目部分 题目分班难度易题目说明幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友是否同班,请你帮忙把同班的小朋友找出来。 小朋友的编号为整数,与前一位小朋友同班用 Y 表示,不同班用 N 表示…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...