C# 如何压缩截图以通过网络发送?

C# 如何压缩截图以通过网络发送?,c#,compression,screenshot,jpeg,C#,Compression,Screenshot,Jpeg,我的应用程序使用WinAPI中的方法制作屏幕截图。屏幕正常,保存为gif,大小为76 kB。Jpg、png和其他格式的大小更大。我必须通过网络发送这个文件,它需要几秒钟,大约2-3秒钟。可以在.NET或任何免费的外部软件中压缩此文件吗?质量不好,因为我只能看几个标签 谢谢除非您试图将多个图像的传输合并到一个文件中(例如,通过将它们合并到一个Zip文件中),否则我看不到压缩图像的意义 JPG、GIF或PNG已经被尽可能地压缩了。例如,使用GZIP压缩现有文件是对计算资源的浪费,没有任何好处 JPG

我的应用程序使用WinAPI中的方法制作屏幕截图。屏幕正常,保存为gif,大小为76 kB。Jpg、png和其他格式的大小更大。我必须通过网络发送这个文件,它需要几秒钟,大约2-3秒钟。可以在.NET或任何免费的外部软件中压缩此文件吗?质量不好,因为我只能看几个标签


谢谢

除非您试图将多个图像的传输合并到一个文件中(例如,通过将它们合并到一个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