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

C#生成缩略图

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;

using System.Text;

namespace learun.util

{

public enum ThumbnailMode

{

/// <summary>

/// 指定宽度,高度按照比例缩放

/// </summary>

Width = 0,

/// <summary>

/// 指定高度,宽度按照比例缩放

/// </summary>

Height = 1,

/// <summary>

/// 按照指定的高度和宽度剪裁

/// </summary>

Cut = 2,

/// <summary>

/// 指定宽度,高度按照比例缩放

/// </summary>

None = 3

}

public class PicUtil

{

public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, ThumbnailMode mode)

{

System.Drawing.Image img_OriginalImage = null;

ImageFormat tFormat = null;

try

{

img_OriginalImage = (Bitmap)System.Drawing.Image.FromFile(originalImagePath);

tFormat = img_OriginalImage.RawFormat;

}

catch (Exception ex)

{

if (img_OriginalImage != null)

{

img_OriginalImage.Dispose();

}

throw new Exception("压缩图片:" + originalImagePath + "失败!\r\n" + ex.Message);

}

int i_ToWidth = width;

int i_ToHeight = height;

int x = 0;

int y = 0;

int i_OriginalWidth = img_OriginalImage.Width;

int i_OriginalHeight = img_OriginalImage.Height;

switch (mode)

{

case ThumbnailMode.Width:

i_ToHeight = img_OriginalImage.Height * width / img_OriginalImage.Width;

break;

case ThumbnailMode.Height:

i_ToWidth = img_OriginalImage.Width * height / img_OriginalImage.Height;

break;

case ThumbnailMode.Cut:

if ((double)img_OriginalImage.Width / (double)img_OriginalImage.Height > (double)i_ToWidth / (double)i_ToHeight)

{

i_OriginalHeight = img_OriginalImage.Height;

i_OriginalWidth = img_OriginalImage.Height * i_ToWidth / i_ToHeight;

y = 0;

x = (img_OriginalImage.Width - i_OriginalWidth) / 2;

}

else

{

i_OriginalWidth = img_OriginalImage.Width;

i_OriginalHeight = img_OriginalImage.Width * height / i_ToWidth;

x = 0;

y = (img_OriginalImage.Height - i_OriginalHeight) / 2;

}

break;

default:

break;

}

//新建一个BMP图片

System.Drawing.Image img_BitMap = new System.Drawing.Bitmap(i_ToWidth, i_ToHeight);

//新建一个画板

System.Drawing.Graphics gp = System.Drawing.Graphics.FromImage(img_BitMap);

//设置高质量插值法

gp.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

//设置高质量、低速度呈现平滑程度

gp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

gp.CompositingQuality = CompositingQuality.HighQuality;

//清空画布并以透明背景色填充

gp.Clear(Color.Transparent);

//指定位置并按大小绘制原图片的指定部分

gp.DrawImage(img_OriginalImage, new Rectangle(0, 0, i_ToWidth, i_ToHeight), new Rectangle(x, y, i_OriginalWidth, i_OriginalHeight), GraphicsUnit.Pixel);

try

{

EncoderParameters ep = new EncoderParameters();

long[] qy = new long[1];

qy[0] = 100;//设置压缩的比例1-100

EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);

ep.Param[0] = eParam;

ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();

ImageCodecInfo jpegICIinfo = null;

for (int i = 0; i < arrayICI.Length; i++)

{

if (arrayICI[i].FormatDescription.Equals("JPEG"))

{

jpegICIinfo = arrayICI[i];

break;

}

}

if (jpegICIinfo != null && Equals(tFormat, ImageFormat.Jpeg))

{

//以JPG格式保存图片

img_BitMap.Save(thumbnailPath, jpegICIinfo, ep);

//Const.iSuccessCount++;

}

else

{

img_BitMap.Save(thumbnailPath, tFormat);

//Const.iSuccessCount++;

}

}

catch (Exception ex)

{

Console.WriteLine("复制图片:" + originalImagePath + "失败!\r\n" + ex.Message + ex.StackTrace);

}

finally

{

if (img_OriginalImage != null)

{

img_OriginalImage.Dispose();

}

if (img_BitMap != null)

{

img_BitMap.Dispose();

}

if (gp != null)

{

gp.Dispose();

}

//GC.Collect();

}

}

}

}

相关文章:

C#生成缩略图

using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;using System.Text;namespace learun.util{public enum ThumbnailMode{/// <summary>/// 指定宽度&#xff0c;高度按照比例缩放/// …...

算法 # SimHash 算法:文本相似度、文本去重、海量文本快速查询

SimHash SimHash 是 Google 发明的海量网页去重的高效算法,将原始的文本映射为 64 位的二进制串,然后通过比较二进制的差异进而表示原始文本内容的差异。 传统的 Hash 算法只负责将原始内容尽量均匀随机地映射为一个 hash 值,原理上相当于伪随机数产生算法。SimHash 本身属…...

Java程序设计-JSP程序设计-SSM校园二手交易系统

摘 要 网络的广泛应用给生活带来了十分的便利。所以把二手物品交易管理与现在网络相结合&#xff0c;利用java技术建设二手物品交易系统&#xff0c;实现二手物品交易的信息化。则对于进一步提高二手物品交易管理发展&#xff0c;丰富二手物品交易管理经验能起到不少的促进作用…...

springBoot 消息转换器和自定义消息转换器

public interface HttpMessageConverter<T> {/*** 能否以指定的类读取*/boolean canRead(Class<?> clazz, Nullable MediaType mediaType);/*** 能否以指定的类写*/boolean canWrite(Class<?> clazz, Nullable MediaType mediaType);/*** 返回支持是消息转…...

机器学习笔记之流形模型——标准流模型基本介绍

机器学习笔记之流形模型——标准流模型基本介绍引言回顾&#xff1a;隐变量模型的缺陷标准流(Normalizing Flow\text{Normalizing Flow}Normalizing Flow)思想分布变换的推导过程引言 本节将介绍概率生成模型——标准流模型(Normalizing Flow\text{Normalizing Flow}Normalizi…...

MIT:只需一层RF传感器,就能为AR头显赋予“X光”穿透视力

近年来&#xff0c;AR在仓库、工厂等场景得到应用&#xff0c;比如GlobalFoundries、亚马逊、菜鸟裹裹就使用摄像头扫描定位货品&#xff0c;并使用AR来导航和标记。目前&#xff0c;这种方案主要基于视觉算法&#xff0c;因此仅能定位视线范围内的目标。然而&#xff0c;在一些…...

对 Dom 树的理解

什么是 DOM 从网络传给渲染引擎的 HTML 文件字节流是无法直接被渲染引擎理解的&#xff0c;所以要将其转化为渲染引擎能够理解的内部结构&#xff0c;这个结构就是 DOM。 DOM 提供了对 HTML 文档结构化的表述。 在渲染引擎中&#xff0c;DOM 有三个层面的作用&#xff1a; …...

电商搜索入门

一、搜索用途通常一个电商平台里面的商品&#xff0c;少则几十万多则上千万甚至上亿的sku&#xff0c;在这么多的商品中&#xff0c;如何让用户可以快速查找到自己想要的商品&#xff0c;那么就需要用到搜索功能来实现。通过分析数据发现&#xff0c;接近40%的点击率是直接通过…...

4.3.1初阶数据结构(C语言)(无头不循环单链表)

1.完整的单链表注释&#xff1a; #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h>typedef int SLTDateType; // 重定义数据类型typedef struct SListNode // 定义结构体类型的节点 {SLTDateType data;str…...

一文深度解读音视频行业技术发展历程

从1948年的香农定律&#xff0c;到音视频的今天。IMMENSE、36氪&#xff5c;作者 北京时间2月28日凌晨&#xff0c;FIFA年度颁奖典礼在巴黎举行。梅西荣膺年度最佳球员&#xff0c;斯卡洛尼当选年度最佳男足主帅&#xff0c;马丁内斯荣获年度最佳男足门将&#xff01;阿根廷因…...

面向对象拓展贴

1. 类和对象的内存分配机制 1.1 分配机制  Java 内存的结构分析 栈&#xff1a; 一般存放基本数据类型(局部变量)堆&#xff1a; 存放对象(Cat cat , 数组等)方法区&#xff1a;常量池(常量&#xff0c;比如字符串)&#xff0c; 类加载信息示意图 [Cat (name, age, price)]…...

Android仿QQ未读消息拖拽粘性效果

效果图原理分析首先是在指定某个位置画一个圆出来&#xff0c;手指按到这个圆的时候再绘制一个可以根据手指位置移动的圆&#xff0c;随着手指的移动两个圆逐渐分离&#xff0c;分离的过程中两圆中间出现连接带&#xff0c;随着两圆圆心距的增大&#xff0c;半径也是根据某一比…...

Linux 打包压缩解压指令 gzip bzip2 tar

总结自鸟哥Linux私房菜 Linux压缩文件的扩展名大多是&#xff1a;“.tar, .tar.gz, .tgz, .gz, .Z, .bz2, *.xz”&#xff0c; 不同压缩文件使用了不同的算法&#xff0c;不能通用压缩或解压 常见扩展名&#xff1a; *.Z compress 程序压缩的文件&#xff1b; *.zip zip 程序…...

系统升级丨分享返佣,助力商企实现低成本高转化营销

秉承助力传统经济数字化转型的长远理念 酷雷曼VR再次在VR全景营销中发力 创新研发“分享返佣”功能 进一步拓宽商企VR全景营销渠道 助力商企搭建低成本、高传播、高转化 的VR营销体系 01、什么是“分享返佣”&#xff1f; ●“分享返佣”即“推广”返佣&#xff0c;是酷…...

机试代码模板

文章目录进制转换高精度加/乘法搜索BFSDFS树二叉树遍历图Dijkstra算法Kruskal算法动态规划最长公共子序列(LCS)最长上升子序列(LIS)KMP算法进制转换 #include <iostream> #include <string> #include <cmath> #include <iomanip> #include <algori…...

Java性能优化-垃圾回收算法-理解CMS回收器

垃圾回收算法 理解 CMS回收器 三个基本操作 1.回收新生代&#xff08;同时暂停所有的应用线程&#xff09; 2.运行并发周期来清理老年代数据 3.如果有必要则FULL GC压缩老年代 当发生新生代回收 &#xff0c; 如果老年代没有足够的空间容纳晋升的对象则执行FULL GC,所有线程停…...

Oracle11G的表空间数据文件大小限制问题处理

1.表空间数据文件容量 oracle11g的表空间数据文件容量与DB_BLOCK_SIZE有关&#xff0c;在初始建库时&#xff0c;DB_BLOCK_SIZE要根据实际需要&#xff0c;设置为 4K,8K、16K、32K、64K等几种大小&#xff0c;ORACLE的物理文件最大只允许4194304个数据块&#xff08;由操作系统…...

计算机三级|网络技术|备考指南|网络系统结构与设计的基本原则|1

一、网络系统结构与设计的基本原则宽带城域网的关键技术p1 p2 p3设计一个宽带城域网涉及“三个平台一个出口”&#xff0c;即网络平台、业务平台、管理平台和城市宽带出口。宽带城域网&#xff1a;宽带城域网划分为三个层次&#xff1a;核心层、汇聚层、接入层。核心层承担高速…...

基于 TI Sitara系列 AM64x核心板——程序自启动说明

前 言 本文主要介绍AM64x的Cortex-A53、Cortex-M4F和Cortex-R5F核心程序自启动使用说明。默认使用AM6442进行测试演示,AM6412测试步骤与之类似。 本说明文档适用开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit 虚拟机:VMware15.5.5 Linux开发环境:Ubun…...

自学5个月Java找到了9K的工作,我的方式值得大家借鉴 第一部分

我是去年9月22日才正式学习Java的&#xff0c;因为在国营单位工作了4年&#xff0c;在天津一个月工资只有5000块&#xff0c;而且看不到任何晋升的希望&#xff0c;如果想要往上走&#xff0c;那背后就一定要有关系才行。而且国营单位的气氛是你干的多了&#xff0c;领导觉得你…...

计算机毕业设计:Python智慧医疗数据可视化与疾病预测系统 Flask框架 随机森林 机器学习 疾病数据 智慧医疗 深度学习(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

Sticky:重新定义Linux桌面数字便利贴的智能助手

Sticky&#xff1a;重新定义Linux桌面数字便利贴的智能助手 【免费下载链接】sticky A sticky notes app for the linux desktop 项目地址: https://gitcode.com/gh_mirrors/stic/sticky 你是否曾在紧张的编程调试中&#xff0c;突然想到一个关键算法优化方案&#xff0…...

FPGA上做图像压缩,别从零造轮子!聊聊DCT那些开源IP核与设计技巧

FPGA图像压缩实战&#xff1a;DCT开源IP核选型与架构优化指南 在嵌入式视觉系统开发中&#xff0c;JPEG图像压缩是FPGA工程师经常遇到的需求场景。当项目周期紧张且资源有限时&#xff0c;明智的开发者会优先考虑利用经过验证的开源IP核&#xff0c;而非从零开始实现离散余弦变…...

从SPICE到Q-SPICE:四阶累积量如何重塑阵列信号处理的超分辨能力

1. 从SPICE到Q-SPICE&#xff1a;为什么我们需要四阶累积量&#xff1f; 我第一次接触SPICE算法是在处理雷达信号的时候。当时团队遇到一个头疼的问题&#xff1a;在强噪声环境下&#xff0c;传统算法就像近视眼观察星空&#xff0c;明明知道那里有信号&#xff0c;却怎么也分辨…...

从find到ind2sub:Matlab数据筛选后操作的完整工作流(以R2023b为例)

从find到ind2sub&#xff1a;Matlab数据筛选后操作的完整工作流&#xff08;以R2023b为例&#xff09; 在数据分析与科学计算领域&#xff0c;Matlab作为一款强大的工具&#xff0c;其矩阵操作能力尤为突出。面对大型矩阵或高维数组时&#xff0c;如何高效地定位并处理特定条件…...

ROS机器人开发:用tf_monitor和tf_echo快速诊断你的坐标转换问题(附真实案例)

ROS机器人坐标转换问题诊断实战&#xff1a;从工具使用到思维升级 当机器人的激光雷达数据与地图匹配出现偏移&#xff0c;或者机械臂末端执行器总是偏离目标位置几厘米时&#xff0c;有经验的开发者会第一时间检查坐标转换系统。ROS中的tf库虽然强大&#xff0c;但一旦出现问题…...

5分钟免费解锁iPhone激活锁:applera1n终极使用指南

5分钟免费解锁iPhone激活锁&#xff1a;applera1n终极使用指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否刚入手了一部二手iPhone&#xff0c;却发现自己被困在激活锁界面无法前进&#xf…...

从一张‘正常’图片到服务器沦陷:文件包含漏洞如何让图片马‘活’过来?

从一张“正常”图片到服务器沦陷&#xff1a;揭秘文件包含漏洞的致命组合攻击 当你深夜检查服务器日志时&#xff0c;发现有人上传了一张普通的风景图。文件头校验通过&#xff0c;MIME类型正确&#xff0c;甚至预览也显示正常。但三天后&#xff0c;这张“图片”却成为攻击者控…...

BUUCTF实战:从内存镜像到加密容器——[VN2020]内存取证全流程解析

1. 初识内存取证&#xff1a;从CTF赛题到实战思维 第一次接触内存取证是在去年的BUUCTF比赛中&#xff0c;当时看到那道[V&N2020]公开赛题目完全摸不着头脑。现在回想起来&#xff0c;内存取证就像是在案发现场收集指纹——只不过我们面对的是计算机运行时留下的"数字…...

从Buck电路到逆变器:手把手教你理解SPWM调制的本质与STM32实现误区

从Buck电路到逆变器&#xff1a;手把手教你理解SPWM调制的本质与STM32实现误区 电力电子领域最迷人的地方&#xff0c;在于不同拓扑结构背后隐藏着相通的底层逻辑。当我第一次看到Buck电路的PWM波形与逆变器的SPWM波形同时出现在示波器上时&#xff0c;突然意识到&#xff1a;…...