C# 如何压缩截图以通过网络发送?
我的应用程序使用WinAPI中的方法制作屏幕截图。屏幕正常,保存为gif,大小为76 kB。Jpg、png和其他格式的大小更大。我必须通过网络发送这个文件,它需要几秒钟,大约2-3秒钟。可以在.NET或任何免费的外部软件中压缩此文件吗?质量不好,因为我只能看几个标签C# 如何压缩截图以通过网络发送?,c#,compression,screenshot,jpeg,C#,Compression,Screenshot,Jpeg,我的应用程序使用WinAPI中的方法制作屏幕截图。屏幕正常,保存为gif,大小为76 kB。Jpg、png和其他格式的大小更大。我必须通过网络发送这个文件,它需要几秒钟,大约2-3秒钟。可以在.NET或任何免费的外部软件中压缩此文件吗?质量不好,因为我只能看几个标签 谢谢除非您试图将多个图像的传输合并到一个文件中(例如,通过将它们合并到一个Zip文件中),否则我看不到压缩图像的意义 JPG、GIF或PNG已经被尽可能地压缩了。例如,使用GZIP压缩现有文件是对计算资源的浪费,没有任何好处 JPG
谢谢除非您试图将多个图像的传输合并到一个文件中(例如,通过将它们合并到一个Zip文件中),否则我看不到压缩图像的意义 JPG、GIF或PNG已经被尽可能地压缩了。例如,使用GZIP压缩现有文件是对计算资源的浪费,没有任何好处 JPG、GIF、PNG已经像mp3一样使用压缩 来自维基百科: 便携式网络图形(PNG/pɪŋ/[2])是一种位图图像格式,采用无损数据压缩 JPEG(/ˈdʒeɪpɛɡ/[发音为jay-peg]是用于数字摄影(图像)的有损压缩的常用方法 GIF图像使用Lempel-Ziv-Welch(LZW)无损数据压缩技术进行压缩,以减少文件大小而不降低视觉质量
除非您试图将多个图像的传输合并到单个文件中(例如,通过将它们合并到单个Zip文件中),否则我看不出压缩图像的意义 JPG、GIF或PNG几乎已经被尽可能地压缩了。例如,使用GZIP压缩现有文件是一种计算资源的浪费,没有任何好处 JPG、GIF、PNG已经像mp3一样使用压缩 来自维基百科: 便携式网络图形(PNG/pɪŋ/[2])是一种位图图像格式,采用无损数据压缩 JPEG(/ˈdʒeɪpɛɡ/[发音为jay-peg]是用于数字摄影(图像)的有损压缩的常用方法 GIF图像使用Lempel-Ziv-Welch(LZW)无损数据压缩技术进行压缩,以减少文件大小而不降低视觉质量
如果您只需要文本,也许您可以将颜色减少到例如4色灰色图像?如果您只需要文本,也许您可以将颜色减少到例如4色灰色图像?您可以考虑在c#中调整图像的大小。这相当容易做到…下面是我过去使用的一些代码:
Image image = Image.FromFile(fi.FullName);
image = resizeImage(image, new Size(120, 120));
EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)85);
ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = qualityParam;
image.Save(OutSourceLoc + "/" + fi.Name, jpegCodec, encoderParams);
static Image resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
b.SetResolution(300, 300);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.CompositingQuality = CompositingQuality.HighSpeed;
g.SmoothingMode = SmoothingMode.HighSpeed;
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (Image)b;
}
private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
// Get image codecs for all image formats
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
// Find the correct image codec
for (int i = 0; i < codecs.Length; i++)
if (codecs[i].MimeType == mimeType)
return codecs[i];
return null;
}
Image=Image.FromFile(fi.FullName);
图像=调整图像大小(图像,新大小(120120));
编码器参数qualityParam=新编码器参数(System.Drawing.Imaging.Encoder.Quality,(长)85);
ImageCodecInfo jpegCodec=GetEncoderInfo(“图像/jpeg”);
EncoderParameters encoderParams=新的EncoderParameters(1);
encoderParams.Param[0]=qualityParam;
image.Save(外包celoc+“/”+fi.Name、jpeg编解码器、encoderParams);
静态图像大小图像(图像imgToResize,大小)
{
int sourceWidth=imgToResize.Width;
int sourceHeight=imgToResize.Height;
浮动百分比=0;
浮动nPercentW=0;
浮点数nPercentH=0;
nPercentW=((float)size.Width/(float)sourceWidth);
nPercentH=((浮点)size.Height/(浮点)sourceHeight);
如果(nPercentH
你可以看看用c#来调整图像的大小。这很容易做到……这里有一些我过去用过的代码:
Image image = Image.FromFile(fi.FullName);
image = resizeImage(image, new Size(120, 120));
EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)85);
ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = qualityParam;
image.Save(OutSourceLoc + "/" + fi.Name, jpegCodec, encoderParams);
static Image resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
b.SetResolution(300, 300);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.CompositingQuality = CompositingQuality.HighSpeed;
g.SmoothingMode = SmoothingMode.HighSpeed;
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (Image)b;
}
private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
// Get image codecs for all image formats
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
// Find the correct image codec
for (int i = 0; i < codecs.Length; i++)
if (codecs[i].MimeType == mimeType)
return codecs[i];
return null;
}
Image=Image.FromFile(fi.FullName);
图像=调整图像大小(图像,新大小(120120));
编码器参数qualityParam=新编码器参数(System.Drawing.Imaging.Encoder.Quality,(长)85);
ImageCodecInfo jpegCodec=GetEncoderInfo(“图像/jpeg”);
EncoderParameters encoderParams=新的EncoderParameters(1);
encoderParams.Param[0]=qualityParam;
image.Save(外包celoc+“/”+fi.Name、jpeg编解码器、encoderParams);
静态图像大小图像(图像imgToResize,大小)
{
int sourceWidth=imgToResize.Width;
int sourceHeight=imgToResize.Height;
浮动百分比=0;
浮动nPercentW=0;
浮点数nPercentH=0;
nPercentW=((float)size.Width/(float)sourceWidth);
nPercentH=((浮点)size.Height/(浮点)sourceHeight);
如果(nPercentH