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

C# 图片下载工具类

写在前面

从浏览器的Html文本中获取图片链接并保存到本地,同时对图片的分辨率和品质进行处理,以满足某些平台的规格需求;可以放到多线程中调用以提高下载效率。

代码实现

    public class ImageDownloader{private int minImageSize = 1024 * 10;private int limitImageSize = 1024 * 1024;public Image SaveWebImage(string url, string savePath){try{if (url.EndsWith("gif"))return null;using (var c = new WebClient()){string imgUrl = url;if (imgUrl.StartsWith("//")){imgUrl = "http:" + imgUrl;}var img = Image.FromStream(new MemoryStream(c.DownloadData(imgUrl)));// 小图直接略过if (img.Width < 200 || img.Height < 200)return null;var r = Resize(img, 640, 640, true);r.Save(savePath);var fileInfo = new FileInfo(savePath);if (fileInfo.Length < minImageSize) // 如果小于10kb那就是无效图片return r;if (fileInfo.Length > limitImageSize) // 品质可以通过参数来控制{EncoderParameters encoderParams = new EncoderParameters();long[] quality = new long[1];quality[0] = 85; // 品质参数,最大为100EncoderParameter encoderParam = new EncoderParameter(Encoder.Quality, quality);encoderParams.Param[0] = encoderParam;ImageCodecInfo codecInfo = GetEncoder(ImageFormat.Jpeg);r.Save(savePath, codecInfo, encoderParams);encoderParam.Dispose();encoderParams.Dispose();}img.Dispose();return r;}}catch (Exception ex){LogHelper.Error(ex);LogHelper.Error("error url:" + url);return null;}}public Image Resize(Image image, int newWidth, int maxHeight, bool onlyResizeIfWider){if (onlyResizeIfWider && image.Width <= newWidth) newWidth = image.Width;var newHeight = image.Height * newWidth / image.Width;var res = new Bitmap(newWidth, newHeight);using (var graphic = Graphics.FromImage(res)){graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;graphic.SmoothingMode = SmoothingMode.HighQuality;graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;graphic.CompositingQuality = CompositingQuality.HighQuality;graphic.DrawImage(image, 0, 0, newWidth, newHeight);}return res;}#region Private Methodsprivate ImageCodecInfo GetEncoder(ImageFormat format){ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();foreach (ImageCodecInfo codec in codecs){if (codec.FormatID == format.Guid){return codec;}}return null;}#endregion}

相关文章:

C# 图片下载工具类

写在前面 从浏览器的Html文本中获取图片链接并保存到本地&#xff0c;同时对图片的分辨率和品质进行处理&#xff0c;以满足某些平台的规格需求&#xff1b;可以放到多线程中调用以提高下载效率。 代码实现 public class ImageDownloader{private int minImageSize 1024 * 1…...

嵌入式硬件电路·电平

目录 1. 电平的概念 1.1 高电平 1.2 低电平 2. 电平的使用场景 2.1 高电平使能 2.2 低电平使能 2.3 失能 1. 电平的概念 电平是指电信号电压的大小或高低状态。在数字电子学中&#xff0c;电平有两种状态&#xff0c;高电平和低电平&#xff0c;用来表示二进制中…...

Python文件路径常用操作

1 文件路径 在进行数据处理时&#xff0c;经常要用代码去读文件里的数据&#xff0c;那么首先就得知道这个文件的文件路径。文件路径简单地说就是文件的存放位置。文件路径分为两块&#xff1a;文件夹路径和文件名&#xff0c;文件名又分为文件基本名和扩展名。 举例说明&…...

Redis-Redis 高并发分布式锁

集群分布式场景高并发 1.negix配置代理和路由 高并发场景超卖问题 1.使用原生redis控制超卖时(若是商品&#xff0c;则可以将商品id作为锁对象)&#xff0c;会遇到的问题 问题一&#xff1a;若直接使用&#xff1a;将获取锁的对象和设置的超时的时间分开&#xff0c;则不能控…...

【推荐系统】MMOE笔记 20231126

paper阅读 任务差异带来的固有冲突实际上会损害至少某些任务的预测&#xff0c;特别是当模型参数在所有任务之间广泛共享时。&#xff08;在说ESMM&#xff09; 共享底层参数可以减少过拟合风险&#xff0c;但是会遇到任务差异引起的优化冲突&#xff0c;因为所有任务都需要在…...

4. 标准 IO 库

4. 标准 IO 库 1. 标准 IO 简介2. FILE 指针3. 标准输入、标准输出和标准错误4. fopen() 和 flose()5. fread() 和 fwrite()6. fseek 定位7. 检查或复位状态7.1 feof()7.2 ferrof()7.3 clearerr() 8. 格式化 IO8.1 格式化输出8. 2 格式化输入 9. IO 缓冲9.1 文件 IO 的内核缓冲…...

SAP Smartform小结

SAP系统做打印单据用的, 感觉很不好用, 特别是要嵌入韩文时必须使用嵌入的word编辑器,运行速度简直不可忍受. 见过一些Adobe interactive form的示例, 看着相当不错, 不过据说需要花money额外买licence, 哪有smartform这种免费东西来得实惠. 一般打印需求,会要求有标题抬头,打…...

KVM虚拟机的NAT网络模式原理及过程展示

NAT的方式及原理 NAT方式是KVM安装后的默认方式。 它支持主机与虚拟机的互访&#xff0c;同时也支持虚拟机访问互联网&#xff0c;但不支持外界访问虚拟机。 default是宿主机安装虚拟机支持模块的时候自动安装的。 其中 virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接…...

亚马逊云科技向量数据库助力生成式AI成功落地实践探秘(一) ​

随着大语言模型效果明显提升&#xff0c;其相关的应用不断涌现呈现出越来越火爆的趋势。其中一种比较被广泛关注的技术路线是大语言模型&#xff08;LLM&#xff09;知识召回&#xff08;Knowledge Retrieval&#xff09;的方式&#xff0c;在私域知识问答方面可以很好的弥补通…...

C# MemoryCache的使用和封装

封装个缓存类&#xff0c;方便下次使用。 using Microsoft.Extensions.Caching.Memory; using System; using System.Collections.Generic;namespace Order.Core.API.Cache {public class GlobalCache C#有偿Q群&#xff1a;927860652{private static readonly MemoryCache …...

【nlp】4.2 nlp中标准数据集(GLUE数据集合中的dev.tsv 、test.tsv 、train.tsv)

nlp中标准数据集 1 GLUE数据集合介绍1.1 数据集合介绍1.2 数据集合路径2 GLUE子数据集的样式及其任务类型2.1 CoLA数据集文件样式2.2 SST-2数据集文件样式2.3 MRPC数据集文件样式2.4 STS-B数据集文件样式2.5 QQP数据集文件样式2.6 (MNLI/SNLI)数据集文件样式2.7 (QNLI/RTE/WNLI…...

Java LinkedList

LinkedList 一个双向链表。 本身是基于链表进行封装的列表, 所以具备了链表的特性: 变更简单, 容量是无限的, 不必像数组提前声明容量等。 同时 LinkedList 支持存储包括 null 在内的所有数据类型。 1 链表 了解 LinkedList 之前, 我们需要先了解一下双向链的特点 单链表, 双…...

【单片机学习笔记】STC8H1K08参考手册学习笔记

STC8H1K08参考手册学习笔记 STC8H系列芯片STC8H1K08开发环境串口烧录 STC8H系列芯片 STC8H 系列单片机是不需要外部晶振和外部复位的单片机&#xff0c;是以超强抗干扰/超低价/高速/低功耗为目标的 8051 单片机,在相同的工作频率下,STC8H 系列单片机比传统的 8051约快12 倍速度…...

RevCol:可逆的柱状神经网络

文章目录 摘要1、简介2、方法2.1、Multi-LeVEl ReVERsible Unit2.2、可逆列架构2.2.1、MACRo设计2.2.2、MicRo 设计2.3、中间监督3、实验部分3.1、图像分类3.2、目标检测3.3、语义分割3.4、与SOTA基础模型的系统级比较3.5、更多分析实验3.5.1、可逆列架构的性能提升3.5.2、可逆…...

HCIA-RS基础-RIP路由协议

前言&#xff1a; RIP路由协议是一种常用的距离矢量路由协议&#xff0c;广泛应用于小规模网络中。本文将详细介绍RIP路由协议的两个版本&#xff1a;RIPv1和RIPv2&#xff0c;并介绍RIP的常用配置命令。通过学习本文&#xff0c;您将能够掌握RIP协议的基本原理、RIPv1和RIPv2的…...

虚拟化逻辑架构: LBR 网桥基础管理

目录 一、理论 1.Linux Bridge 二、实验 1.LBR 网桥管理 三、问题 1.Linux虚拟交换机如何增删 一、理论 1.Linux Bridge Linux Bridge&#xff08;网桥&#xff09;是用纯软件实现的虚拟交换机&#xff0c;有着和物理交换机相同的功能&#xff0c;例如二层交换&#…...

【Spring之AOP底层源码解析,持续更新中~~~】

文章目录 一、动态代理1.1、ProxyFactory1.2、Advice的分类1.3、Advisor的理解 二、创建代理对象的方式2.1、ProxyFactoryBean2.2、BeanNameAutoProxyCreator2.3、DefaultAdvisorAutoProxyCreator 三、Spring AOP的理解3.1、AOP中的概念3.2、Advice在Spring AOP中对应API3.3、T…...

C语言:有一篇文章,共三行文字,每行有80个字符。要求分别统计出单词个数、空格数。

分析&#xff1a; #include<stdio.h>&#xff1a;这是一个预处理指令&#xff0c;将stdio.h头文件包含到程序中&#xff0c;以便使用输入输出函数。 int main()&#xff1a;这是程序的主函数&#xff0c;是程序执行的入口点。 char a[3][80];&#xff1a;定义了一个二维…...

【数据结构与算法篇】一文详解数据结构之二叉树

树的介绍及二叉树的C实现 树的概念相关术语树的表示 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一 个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c; 也就是说它是根朝上&#xff0c;而叶朝…...

Windows主机信息收集命令

一.常用信息搜集 whoami # 查看当前用户 net user # 查看所有用户 query user # 查看当前在线用户 ipconfig /all # 查看当前主机的主机名/IP/DNS等信息 route print # 查看路由表信息 netstat -ano # 查看端口开放情况 arp -a # 查看arp解析情况 tasklist /svc # 查看进…...

【JAVA基础面经】线程安全的单例模式

文章目录单例模式&#xff08;Singleton Pattern&#xff09;一、饿汉模式二、懒汉模式解决懒汉式线程安全问题双重校验锁提高并发性能静态内部类&#xff08;JDK 1.2&#xff09;最佳方法&#xff1a;枚举方式&#xff08;JDK 1.5&#xff09;方法的对比单例模式&#xff08;S…...

【AI原生代码审查实战指南】:2026奇点大会首发的7大审查范式与3类高危漏洞自动拦截模型

第一章&#xff1a;2026奇点智能技术大会&#xff1a;AI原生代码审查 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点智能技术大会上&#xff0c;“AI原生代码审查”不再作为辅助工具存在&#xff0c;而是深度嵌入软件开发生命周期的每个环节——从提交前的本地预检…...

交换机堆叠技术实战:从原理到配置的全面解析

1. 为什么需要交换机堆叠&#xff1f; 想象一下你管理着一个中型企业的网络&#xff0c;核心机房里有5台独立工作的交换机。每次新增设备都要手动配置每台交换机&#xff0c;故障时得逐台排查&#xff0c;升级系统更是要一台台操作——这种场景下&#xff0c;交换机堆叠技术就像…...

2026年2月 | 薪酬绩效设计TOP8咨询公司推荐

在企业人效低下、薪酬激励失效、人才流失率攀升的挑战下&#xff0c;科学的薪酬绩效体系成为组织破局的关键。数据显示&#xff0c;超过60%的中小企业面临"高成本、低产出"困境&#xff0c;薪酬结构不合理导致人才流失率居高不下。本文基于"方法论创新、落地执行…...

Proteus仿真必备:MPU6050模型下载与使用全攻略(含componentsearchengine.com注册技巧)

Proteus仿真进阶&#xff1a;MPU6050模型深度应用与实战技巧 在嵌入式系统开发中&#xff0c;仿真环节往往能节省大量硬件调试时间。Proteus作为业界广泛使用的电路仿真软件&#xff0c;其模型库的丰富程度直接决定了仿真效率。MPU6050这款集成了三轴陀螺仪和三轴加速度计的传感…...

觅感科技WiFi 2.4G5G双频双模技术的应用价值与能力

深圳觅感科技有限公司作为物联网通信方案商&#xff0c;专注于低功耗、高稳定性的WiFi/BLE通讯模组研发及嵌入式软件定制化服务。公司符合标准的质量管理体系认证&#xff0c;产品具备FCC/CE/SRRC等认证及无线电发射设备型号核准证。一、双频双模模组系列MSWXB2522模组定位为一…...

示波器带宽选200MHz还是500MHz?手把手教你根据信号速率和PCB布线选择合适仪器

示波器带宽选200MHz还是500MHz&#xff1f;从信号完整性到实战选型指南 当你在实验室调试一块基于FPGA的高速数字电路板时&#xff0c;突然发现信号波形出现难以解释的振铃和过冲。此时你面前摆着两台示波器&#xff1a;一台200MHz带宽的经济型型号&#xff0c;另一台500MHz带宽…...

踩坑无数!YOLOv8工业质检全流程:标注→训练→C#部署落地

摘要&#xff1a;本文基于汽车零部件冲压车间真实项目经验&#xff0c;完整还原YOLOv8工业缺陷检测从0到1的落地流程。从产线数据采集、标准化标注、模型训练调优&#xff0c;到C#上位机部署、产线验证迭代&#xff0c;每一步都标注工业场景专属避坑点。解决了小缺陷漏检、光照…...

告别网盘限速!八大平台免费直链下载助手完整指南

告别网盘限速&#xff01;八大平台免费直链下载助手完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 …...

AAV三质粒比例优化指南|教你如何选择合适的GMP级PEI转染试剂【曼博解析】

优化AAV三质粒系统比例必看&#xff01;教你挑选合适的GMP级PEI转染试剂摘要&#xff1a;本文从三质粒系统比例与挑选GMP级转染试剂的维度&#xff0c;分享如何优化AAV病毒包装工艺。关键词&#xff1a;PEI转染试剂, AAV病毒包装,AAV三质粒比例,GMP级转染试剂,质粒转染,DNA转染…...