C#编程之使用TinyPNG提供的API,对图片进行压缩
小标 2018-11-14 来源 : 阅读 4051 评论 0

摘要:本文主要向大家介绍了C#编程之使用TinyPNG提供的API,对图片进行压缩,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

本文主要向大家介绍了C#编程之使用TinyPNG提供的API,对图片进行压缩,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

项目需要,经常需要手动压缩图片,流程太过麻烦,效率低下。所以写了一个小程序,以提高工作效率

using System;

using System.Net;

using System.Text;

using System.IO;


class Program

{

   static void Main()

   {

       Console.WriteLine("请输入TinyPng.com的API KEY,获取地址:https://tinypng.com/developers");

       string key = Console.ReadLine();


       if (!System.IO.Directory.Exists("NewImg"))

       {

           System.IO.Directory.CreateDirectory("NewImg");

           Console.WriteLine("已创建NewImg目录,请把需要处理的图片放到该目录下");

           Console.ReadKey(true);

           return;

       }


       if (!System.IO.Directory.Exists("CompressedImg")){

           System.IO.Directory.CreateDirectory("CompressedImg");

       }


       string url = "https://api.tinify.com/shrink";

       string[] fileStrs = System.IO.Directory.GetFiles("NewImg");


       Console.WriteLine("共" + fileStrs.Length + "个文件,请等待下载完成...");

       int num = 0;

       foreach (string s in fileStrs)

       {

           System.IO.FileInfo info = new System.IO.FileInfo(s);

           if (info.Extension == ".png" || info.Extension == ".jpg")

           {

               string input = @"NewImg/" + info.Name;

               string output = @"CompressedImg/" + info.Name;

               GetCompressImg(url, key, input, output);

               num++;

           }

       }

       Console.WriteLine("文件已下载到CompressedImg文件夹下,共" + num + "个文件");

       Console.ReadKey(true);

   }


   static public void GetCompressImg(string url,string key,string input,string output){

       WebClient client = new WebClient();

       string auth = Convert.ToBase64String(Encoding.UTF8.GetBytes("api:" + key));

       client.Headers.Add(HttpRequestHeader.Authorization, "Basic " + auth);

       try

       {

           client.UploadData(url, File.ReadAllBytes(input));

           client.DownloadFile(client.ResponseHeaders["Location"], output);

       }

       catch (WebException)

       {

           Console.WriteLine("网络请求失败:" + input);

       }

   }

}


上面的程序在下载期间会阻塞主线程,效率不够高。

使用await/async改写成异步模式。


using System;

using System.Net;

using System.Text;

using System.IO;

using System.Threading.Tasks;


class Program

{


static public int fileNums = 0;

static public int status = 0;


static void Main()

   {

       Console.WriteLine("请输入TinyPng.com的API KEY,获取地址:https://tinypng.com/developers");

       string key = Console.ReadLine();


       if (!System.IO.Directory.Exists("NewImg"))

       {

           System.IO.Directory.CreateDirectory("NewImg");

           Console.WriteLine("已创建NewImg目录,请把需要处理的图片放到该目录下");

           Console.ReadKey(true);

           return;

       }


       if (!System.IO.Directory.Exists("CompressedImg")){

           System.IO.Directory.CreateDirectory("CompressedImg");

       }

string url = "https://api.tinify.com/shrink";

string[] fileStrs = System.IO.Directory.GetFiles("NewImg");

fileNums = fileStrs.Length;


foreach (string s in fileStrs) {

System.IO.FileInfo info = new System.IO.FileInfo(s);

if (info.Extension == ".png" || info.Extension == ".jpg") {

string input = @"NewImg/" + info.Name;

string output = @"CompressedImg/" + info.Name;

SendReq(url, key, input, output);

}

}


Console.WriteLine("共" + fileNums + "个文件,请等待下载完成...");

Console.ReadKey(true);

   }


static public async void SendReq(string url, string key, string input, string output) {

await GetCompressImg(url, key, input, output);

Console.WriteLine("已完成:" + input);

status++;

if (status == fileNums) {

Console.WriteLine("下载已全部完成,共" + status + "个文件");

}

}


static public async Task GetCompressImg(string url,string key,string input,string output){

WebClient client = new WebClient();

       string auth = Convert.ToBase64String(Encoding.UTF8.GetBytes("api:" + key));

       client.Headers.Add(HttpRequestHeader.Authorization, "Basic " + auth);

try {

await client.UploadDataTaskAsync(url, File.ReadAllBytes(input));

await client.DownloadFileTaskAsync(client.ResponseHeaders["Location"], output);

} catch (WebException) {

Console.WriteLine("网络请求失败:" + input);

}


}

}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved