返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#实现无损压缩图片代码示例
  • 832
分享到

C#实现无损压缩图片代码示例

2024-04-02 19:04:59 832人浏览 独家记忆
摘要

一般在WEB应用中,对客户端提交上来的图片肯定需要进行压缩的。尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,影响用户体验,所以一般会将图片进行压缩。 代码实现

一般在WEB应用中,对客户端提交上来的图片肯定需要进行压缩的。尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,影响用户体验,所以一般会将图片进行压缩。

代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.windows.FORMs;

namespace ImageCompress
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 无损压缩图片
        /// </summary>
        /// <param name="sFile">原图片地址(包含图片名称)</param>
        /// <param name="dFile">压缩后保存图片地址(包含图片名称)</param>
        /// <param name="flag">压缩质量(数字越小压缩率越高)1-100</param>
        /// <param name="size">压缩后图片的最大大小</param>
        /// <param name="sfsc">是否是第一次调用</param>
        /// <returns></returns>
        public static bool CompressImage(string sFile, string dFile, int flag = 90, int size = 300, bool sfsc = true)
        {
            //如果是第一次调用,原始图像的大小小于要压缩的大小,则直接复制文件,并且返回true
            FileInfo firstFileInfo = new FileInfo(sFile);
            if (sfsc == true && firstFileInfo.Length < size * 1024)
            {
                firstFileInfo.CopyTo(dFile);
                return true;
            }
            Image iSource = Image.FromFile(sFile);
            ImageFormat tFormat = iSource.RawFormat;
            int dHeight = iSource.Height / 2;
            int dWidth = iSource.Width / 2;
            int sW = 0, sH = 0;
            //按比例缩放
            Size tem_size = new Size(iSource.Width, iSource.Height);
            if (tem_size.Width > dHeight || tem_size.Width > dWidth)
            {
                if ((tem_size.Width * dHeight) > (tem_size.Width * dWidth))
                {
                    sW = dWidth;
                    sH = (dWidth * tem_size.Height) / tem_size.Width;
                }
                else
                {
                    sH = dHeight;
                    sW = (tem_size.Width * dHeight) / tem_size.Height;
                }
            }
            else
            {
                sW = tem_size.Width;
                sH = tem_size.Height;
            }

            Bitmap ob = new Bitmap(dWidth, dHeight);
            Graphics g = Graphics.FromImage(ob);

            g.Clear(Color.WhiteSmoke);
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

            g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);

            g.Dispose();

            //以下代码为保存图片时,设置压缩质量
            EncoderParameters ep = new EncoderParameters();
            long[] qy = new long[1];
            qy[0] = flag;//设置压缩的比例1-100
            EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
            ep.Param[0] = eParam;

            try
            {
                ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
                ImageCodecInfo jpegICIinfo = null;
                for (int x = 0; x < arrayICI.Length; x++)
                {
                    if (arrayICI[x].FormatDescription.Equals("JPEG"))
                    {
                        jpegICIinfo = arrayICI[x];
                        break;
                    }
                }
                if (jpegICIinfo != null)
                {
                    ob.Save(dFile, jpegICIinfo, ep);//dFile是压缩后的新路径
                    FileInfo fi = new FileInfo(dFile);
                    if (fi.Length > 1024 * size)
                    {
                        flag = flag - 10;
                        CompressImage(sFile, dFile, flag, size, false);
                    }
                }
                else
                {
                    ob.Save(dFile, tFormat);
                }
                return true;
            }
            catch
            {
                return false;
            }
            finally
            {
                iSource.Dispose();
                ob.Dispose();
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string sfile = @"C:\Users\Mingliang_wang\Pictures\Screenshots\s_test.jpg";
            string dfile = @"C:\Users\Mingliang_wang\Pictures\Screenshots\d_test.jpg";
            CompressImage(sfile,dfile);
        }
    }
}

到此这篇关于C#实现无损压缩图片的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#实现无损压缩图片代码示例

本文链接: https://lsjlt.com/news/146487.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#实现无损压缩图片代码示例
    一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的。尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,影响用户体验,所以一般会将图片进行压缩。 代码实现...
    99+
    2024-04-02
  • C#怎么实现无损压缩图片
    今天小编给大家分享一下C#怎么实现无损压缩图片的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一般在web应用中,对客户端提交...
    99+
    2023-06-30
  • Python实现无损放大图片的示例代码
    今天做一个超简单的无损放大图片的程序,原理很简单 JPG原理:读取原图片的像素点的RGB颜色值并保存到文件内,然后将原图进行翻倍放大,在放大的图上进行绘制,绘制一个像素的翻倍大小,一...
    99+
    2024-04-02
  • C#实现批量压缩和解压缩的示例代码
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-26
    C#压缩 解压缩 C#压缩 C# 解压缩
  • Android图片实现压缩处理的实例代码
    整理文档,搜刮出一个Android图片实现压缩处理的实例代码,稍微整理精简一下做下分享。详解:获取本地图片File文件 获取BitmapFactory.Options对象 计算原始图片 目标图片宽高比 计算输出的图片宽高根据...
    99+
    2023-05-30
    android 图片 压缩
  • android bitmap compress(图片压缩)代码
    android的照相功能随着手机硬件的发展,变得越来越强大,能够找出很高分辨率的图片。有些场景中,需要照相并且上传到服务,但是由于图片的大小太大,那么就上传就会很慢(在有些网络...
    99+
    2022-06-06
    压缩 compress 图片 bitmap 图片压缩 Android
  • java实现1M图片压缩优化到100kb实现示例
    目录引言一、图像压缩二、Java数字图像处理三、图像压缩实战四、其他开源库五、一点点心声引言 坦白从宽吧,我就是那个花了两天两夜把 1M 图片优化到 100kb 的家伙—...
    99+
    2024-04-02
  • Java 实现LZ78压缩算法的示例代码
    LZ78 压缩算法的 Java 实现 1、压缩算法的实现 通过多路搜索树提高检索速度 package com.wretchant.lz78; import java.util....
    99+
    2024-04-02
  • Java实现无损Word转PDF的示例代码
    目录前言word转pdf实现思路项目远程仓库Maven项目pom文件依赖核心代码实现结果分析前言 本来想写word转pdf和pdf转word的代码呢,没想到word转pdf就写了很多...
    99+
    2024-04-02
  • pytho多张图片的无损拼接的实现示例
    目录导入 python 库查看需要拼接的图片横向拼接保存拼接后的图片总结纵向拼接图片间距导入 python 库 import matplotlib.pyplot as plt i...
    99+
    2024-04-02
  • Python实现图片压缩的案例详解
    目录1、引言2、PIL模块2.1 quality 方式2.2 thumbnail方式3、OpenCV模块3.1 安装3.2 执行代码4、总结1、引言 小屌丝:鱼哥,求助,求助 小鱼:...
    99+
    2024-04-02
  • C#实现图片轮播功能的示例代码
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-19
    C#图片轮播功能 C#图片轮播 C# 轮播
  • electron-vue图片压缩的示例分析
    这篇文章给大家分享的是有关electron-vue图片压缩的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 最近用electron-vue(E...
    99+
    2024-04-02
  • PythonFlask实现HTML文件压缩案例代码(9级压缩)
    目录 第三方库 Flask-compress 配合 render_template() 函数实现压缩 Flask-compress 实例化时的其他参数 flask-compress ...
    99+
    2023-01-29
    Python Flask 实现 HTML 文件压缩 Python HTML 文件压缩 Python 文件压缩
  • C#实现图片缩略图功能的示例详解
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-23
    C#图片缩略图 C# 缩略图
  • Java压缩JavaScript代码实例
    这篇文章主要讲解了Java压缩JavaScript代码实例,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。通过移除空行和注释来压缩 JavaScript 代码public class JavaScriptComp...
    99+
    2023-05-30
    javascript java avascript
  • C++实现对RGB图片进行编码的示例代码
    目录1.转换色彩空间2.离散余弦变化3.zigzag编码4.量化5.Huffman编码代码如下依据上一篇的JPEG编码所得到的RGB信息,我们可以重新对RGB图片进行编码,也可对其他...
    99+
    2023-05-19
    C++对图片进行编码 C++图片编码 C++图片
  • Android图片压缩的实例详解
    Android图片压缩的实例详解在做微信分享的时候,由于分享的缩略图要求不得大于32K,否则不能调起微信,所以总结了一下Android图片的压缩问题,大部分资料都是来自网上各位的分享,自己只是完善或修改了一下,本着继续分享的精神,也方便自己...
    99+
    2023-05-30
    android 图片压缩 roi
  • python实现图片批量压缩
    目录第一种 一:安装包二:导入包三:获取图片文件的大小四:输出文件夹下的文件五:压缩文件到指定大小,我期望的是150KB,step和quality可以修改到最合适的数值六:...
    99+
    2024-04-02
  • Canvas如何实现图片压缩
    这篇文章主要介绍Canvas如何实现图片压缩,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Canvas图片压缩流程接下来我将以具体实例为大家讲解Canvas图片压缩的具体流程。一、本...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作