//因为浏览器安全问题,无法获取上传图片地址,需要先存一遍然后再获取地址作参数上传

var des = CompressImage(@"C:\Users\PC\Pictures\测试\1652344981(1).jpg", @"C:\Users\PC\Pictures\测试\ok.jpg");

Console.WriteLine(des);

Console.ReadLine();

///



/// 无损压缩图片

///

/// 原图片地址

/// 压缩后保存图片地址

/// 压缩质量(数字越小压缩率越高)1-100

/// 压缩后图片的最大大小

/// 是否是第一次调用

///

bool CompressImage(string sFile, string dFile, int flag = 90, int size = 200, 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);

using (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(); }

}

//JS版本

转至:https://blog.csdn.net/wrongyao/article/details/104807924

C#/JS 压缩到指定大小的图片 (内存不足问题修改)的更多相关文章

  1. C# 图片超过指定大小将压缩到指定大小不失真

    using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Drawing2D;us ...

  2. iOS学习——图片压缩到指定大小以内

    一.图片压缩简述 在我们开发过程中,有可能会遇到拍照.或者从相册中选择图片,要么单选或者多选,然后上传图片到服务器,一般情况下一张图片可能3-4M,如果类似微信朋友圈上传9张图片大约是 35M左右,如 ...

  3. 微信小程序 上传图片并等比列压缩到指定大小

    微信小程序官方API中  wx.chooseImage() 是可以进行图片压缩的,可惜的是不能压缩到指定大小. 实际开发中需求可能是压缩到指定大小: 原生js可以使用canvas来压缩,但由于微信小程 ...

  4. PHP 生成指定大小随机图片

    PHP 生成指定大小随机图片 <?php $image_width = 100; $image_height = 100; $image_str = ''; if (isset($_GET['w ...

  5. iOS 图片按比例压缩,指定大小压缩

    使用系统方法UIImageJPEGRepresentation(UIimage *image,CGFloat quality)进行图片质量压缩,暂且叫参数quality为压缩比吧,取值范围为0-1. ...

  6. PHP JS HTML ASP页面跳转代码 延时跳转代码 返回到上一界面并刷新 JS弹出指定大小的新窗口

    1.PHP延时跳转代码 //跳转到浏览界面 header("Refresh:1;url=machine_list.php"); //不延时 <?php header(&quo ...

  7. vue+element-ui upload图片上传前大小超过4m,自动压缩到指定大小,长宽

    最近项目需要实现一个需求,用户上传图片时,图片大小超过4M,长宽超过2000,需要压缩到400k,2000宽高.在git上找到一个不错的方法,把实现方法总结一下: 安装image-conversion ...

  8. [Android算法] bitmap 将图片压缩到指定的大小

    Bitmap压缩到指定大小: private void imageZoom() {//图片允许最大空间 单位:KBdouble maxSize =400.00;//将bitmap放至数组中,意在bit ...

  9. Bitmap压缩到指定尺寸大小,获取圆角、圆形图片

    /** * 使用Matrix将Bitmap压缩到指定大小 * @param bitmap * @param w * @param h * @return */ public static Bitmap ...

  10. C# 压缩图片到指定宽度,假如图片小于指定宽度 判断图片大小是否大于指定大小(KB) 如果大于则压缩图片质量 宽高不变

    class Program { static void Main(string[] args) {//G:\zhyue\backup\projects\Test\ConsoleApplication1 ...

随机推荐

  1. Java外包程序员的技术出路

    学习的两个目的: 应付面试 应付工作(解决问题) 首先要明白学习的目的,不同阶段,不同技术的学习目的是不一样的. 有些技术,仅仅是应用级别的,有些技术是原理级别的(主要还是应试).所以不同技术.不同时 ...

  2. MySQL 的 NULL 值是怎么存储的?

    大家好,我是小林. 之前有位读者在面字节的时候,被问到这么个问题: 如果你知道 MySQL 一行记录的存储结构,那么这个问题对你没什么难度. 如果你不知道也没关系,这次我跟大家聊聊 MySQL 一行记 ...

  3. 【JVM调优】Day01:Garbage的概念、垃圾回收的算法(标记清除、拷贝、标记压缩)、各种垃圾回收器(Serial、Parallel、CMS并发)及存在的问题

    〇.前言 简历写上:熟悉GC常用算法,熟悉常见垃圾回收器.具有实际JVM调优实战经验 瞬间涨3k 一.什么是garbage Java中垃圾回收器自动进行垃圾回收,不用自己回收 new 对象在内存中,c ...

  4. 秒懂 Golang 中的 条件变量(sync.Cond)

    本篇文章面向的读者: 已经基本掌握Go中的 协程(goroutine),通道(channel),互斥锁(sync.Mutex),读写锁(sync.RWMutex) 这些知识.如果对这些还不太懂,可以先 ...

  5. Codeforces Round #838 (Div. 2) D. GCD Queries

    题意 有个长度为n的排列p,[0,1,2,...n-1],你可以进行至多2*n次询问,每次询问两个i,j,返回gcd(pi,pj),让你在规定时间内猜出0在哪两个位置之一 思路 这是一道交互题,询问的 ...

  6. java逻辑运算中异或^

    本文主要阐明逻辑运算符^(异或)的作用 a ^ b,相异为真,相同为假. 注意,异或运算,还能交换两个变量. int a = 1; int b = 2; System.out.println(&quo ...

  7. Django 连接各数据库配置汇总(sqlite3,MySql,Oracle)

    在django中,默认配置的数据库是 sqlite3 # Database # https://docs.djangoproject.com/en/2.0/ref/settings/#database ...

  8. 小程序与app区别及测试点

    小程序和app区别 1. 用户获取渠道区别 小程序: 二维码.用户分享推荐.搜索小程序 APP: 需要去应用市场(或其他)下载 2. 下载.安装卸载 小程序: 不需下载安装,清除时直接删除小程序 AP ...

  9. @LoadBalanced注解原理

    在使用springcloud ribbon客户端负载均衡的时候,可以给RestTemplate bean 加一个@LoadBalanced注解,就能让这个RestTemplate在请求时拥有客户端负载 ...

  10. [深度学习] 经典深度学习模型及其微调(Caffe)总结

    目录 经典模型 Caffe预训练模型 经典模型 LeNet https://blog.csdn.net/kaido0/article/details/53161684 AlexNet https:// ...