使用TinyPNG提供的API,对图片进行压缩(C#)

摘要:
项目需要,经常需要手动压缩图片,流程太过麻烦,效率低下。System.IO.Directory.Exists){System.IO.Directory.CreateDirectory;}stringurl="https://api.tinify.com/shrink";string[]fileStrs=System.IO.Directory.GetFiles;Console.WriteLine;intnum=0;foreach{System.IO.FileInfoinfo=newSystem.IO.FileInfo;if{stringinput=@"NewImg/"+info.Name;stringoutput=@"CompressedImg/"+info.Name;GetCompressImg;num++;}}Console.WriteLine;Console.ReadKey;}staticpublicvoidGetCompressImg{WebClientclient=newWebClient();stringauth=Convert.ToBase64String;client.Headers.Add;try{client.UploadData;client.DownloadFile;}catch{Console.WriteLine;}}}上面的程序在下载期间会阻塞主线程,效率不够高。使用await/async改写成异步模式。
项目需要,经常需要手动压缩图片,流程太过麻烦,效率低下。所以写了一个小程序,以提高工作效率
  1. using System;
  2. using System.Net;
  3. using System.Text;
  4. using System.IO;
  5. classProgram
  6. {
  7. staticvoidMain()
  8. {
  9. Console.WriteLine("请输入TinyPng.com的API KEY,获取地址:https://tinypng.com/developers");
  10. stringkey =Console.ReadLine();
  11. if(!System.IO.Directory.Exists("NewImg"))
  12. {
  13. System.IO.Directory.CreateDirectory("NewImg");
  14. Console.WriteLine("已创建NewImg目录,请把需要处理的图片放到该目录下");
  15. Console.ReadKey(true);
  16. return;
  17. }
  18. if(!System.IO.Directory.Exists("CompressedImg")){
  19. System.IO.Directory.CreateDirectory("CompressedImg");
  20. }
  21. stringurl ="https://api.tinify.com/shrink";
  22. string[]fileStrs =System.IO.Directory.GetFiles("NewImg");
  23. Console.WriteLine("共"+fileStrs.Length+"个文件,请等待下载完成...");
  24. intnum =0;
  25. foreach(strings infileStrs)
  26. {
  27. System.IO.FileInfoinfo =newSystem.IO.FileInfo(s);
  28. if(info.Extension==".png"||info.Extension==".jpg")
  29. {
  30. stringinput =@"NewImg/"+info.Name;
  31. stringoutput =@"CompressedImg/"+info.Name;
  32. GetCompressImg(url,key,input,output);
  33. num++;
  34. }
  35. }
  36. Console.WriteLine("文件已下载到CompressedImg文件夹下,共"+num +"个文件");
  37. Console.ReadKey(true);
  38. }
  39. staticpublicvoidGetCompressImg(stringurl,stringkey,stringinput,stringoutput){
  40. WebClientclient =newWebClient();
  41. stringauth =Convert.ToBase64String(Encoding.UTF8.GetBytes("api:"+key));
  42. client.Headers.Add(HttpRequestHeader.Authorization,"Basic "+auth);
  43. try
  44. {
  45. client.UploadData(url,File.ReadAllBytes(input));
  46. client.DownloadFile(client.ResponseHeaders["Location"],output);
  47. }
  48. catch(WebException)
  49. {
  50. Console.WriteLine("网络请求失败:"+input);
  51. }
  52. }
  53. }

上面的程序在下载期间会阻塞主线程,效率不够高。
使用await/async改写成异步模式。

  1. using System;
  2. using System.Net;
  3. using System.Text;
  4. using System.IO;
  5. using System.Threading.Tasks;
  6. classProgram
  7. {
  8. staticpublicintfileNums =0;
  9. staticpublicintstatus =0;
  10. staticvoidMain()
  11. {
  12. Console.WriteLine("请输入TinyPng.com的API KEY,获取地址:https://tinypng.com/developers");
  13. stringkey =Console.ReadLine();
  14. if(!System.IO.Directory.Exists("NewImg"))
  15. {
  16. System.IO.Directory.CreateDirectory("NewImg");
  17. Console.WriteLine("已创建NewImg目录,请把需要处理的图片放到该目录下");
  18. Console.ReadKey(true);
  19. return;
  20. }
  21. if(!System.IO.Directory.Exists("CompressedImg")){
  22. System.IO.Directory.CreateDirectory("CompressedImg");
  23. }
  24. stringurl ="https://api.tinify.com/shrink";
  25. string[]fileStrs =System.IO.Directory.GetFiles("NewImg");
  26. fileNums =fileStrs.Length;
  27. foreach(strings infileStrs){
  28. System.IO.FileInfoinfo =newSystem.IO.FileInfo(s);
  29. if(info.Extension==".png"||info.Extension==".jpg"){
  30. stringinput =@"NewImg/"+info.Name;
  31. stringoutput =@"CompressedImg/"+info.Name;
  32. SendReq(url,key,input,output);
  33. }
  34. }
  35. Console.WriteLine("共"+fileNums +"个文件,请等待下载完成...");
  36. Console.ReadKey(true);
  37. }
  38. staticpublicasync voidSendReq(stringurl,stringkey,stringinput,stringoutput){
  39. await GetCompressImg(url,key,input,output);
  40. Console.WriteLine("已完成:"+input);
  41. status++;
  42. if(status ==fileNums){
  43. Console.WriteLine("下载已全部完成,共"+status +"个文件");
  44. }
  45. }
  46. staticpublicasync TaskGetCompressImg(stringurl,stringkey,stringinput,stringoutput){
  47. WebClientclient =newWebClient();
  48. stringauth =Convert.ToBase64String(Encoding.UTF8.GetBytes("api:"+key));
  49. client.Headers.Add(HttpRequestHeader.Authorization,"Basic "+auth);
  50. try{
  51. await client.UploadDataTaskAsync(url,File.ReadAllBytes(input));
  52. await client.DownloadFileTaskAsync(client.ResponseHeaders["Location"],output);
  53. }catch(WebException){
  54. Console.WriteLine("网络请求失败:"+input);
  55. }
  56. }
  57. }


null

免责声明:文章转载自《使用TinyPNG提供的API,对图片进行压缩(C#)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS 响应链学习vue之windows下安装live-server 超级详细篇下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#中常用的经典文件操作方法

 C#追加文件 StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt"); sw.WriteLine("追逐理想"); sw.WriteLine("kzlll"); sw.WriteLine(".NET笔记"); sw.Flush(); sw.Close(); C#拷贝文件...

c# 利用百度图像处理【人像分割】一键抠图

百度AI开放平台-人像分割: http://ai.baidu.com/tech/body/seg 注意本文后面的话,百度这个技术效果太差劲了,国外这 https://www.remove.bg/ 个比百度强大很多。 using System; using System.Collections.Generic; using System.Linq; usin...

DEV ComBoxEdit实现模糊检索数据

这几天老大叫我修改一下项目中LookUpEdit控件的下拉选择功能,实现模糊检索数据,经过一番研究,发现LookUpEdit控件只能实现部分模糊检索数据功能,也就是它的检索索引是从第一位开始,也就是模糊检索数据的时候,用户必须从头开始检索,这样给用户不友好,如果只知道其中的某些关键字则实现不了。如下图: 查询了资料后,发现LookUpEdit不支持自由输...

注册表比较工具

RegShot 是一种注册表比较工具,它通过两次抓取注册表而快速地比较出答案。它还可以将您的注册表以纯文本方式记录下来,便于浏览;还可以监察 Win.ini,System.ini 中的键值;还可以监察您 Windows 目录和 System 目录中文件的变化,为您手工卸载某些软件创造条件。 1.下载地址 https://sourceforge.net/pr...

Java中使用Jedis连接Redis对Hash进行操作的常用命令

场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Redis的启动和关闭(前台启动和后台启动): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details...

java 类变量初始化顺序

假定有一个类定义如下: package com.zhang; public final class Girl { // static代码块1 private static String sex = "female"; // 成员方法代码块1 private String name = "anonymous";...