几何尺寸与公差论坛

 找回密码
 注册
查看: 1545|回复: 3

png和jpeg在多线程下,哪种存图速度快

  [复制链接]
发表于 2023-7-5 16:16:23 | 显示全部楼层 |阅读模式
在多线程下,PNG和JPEG的存图速度取决于多个因素,包括图像的大小、压缩质量、硬件性能等。一般情况下,JPEG在多线程下存图速度可能会更快。

JPEG是一种有损压缩格式,它可以通过调整压缩质量来平衡图像质量和文件大小。JPEG的压缩算法相对简单,处理速度较快。在多线程环境下,JPEG可以更好地利用多核处理器的并行计算能力,从而提高存图速度。

而PNG是一种无损压缩格式,它可以保留图像的精确细节,但文件大小通常较大。PNG的压缩算法相对复杂,处理速度较慢。在多线程环境下,PNG的存图速度可能会受到压缩算法的限制,无法充分利用多核处理器的并行计算能力。

然而,需要注意的是,存图速度的快慢并不是选择存储格式的唯一因素。还需要考虑图像质量、文件大小、透明度支持等其他因素。因此,在实际应用中,需要综合考虑各种因素,选择最适合的存储格式。
 楼主| 发表于 2023-7-5 16:17:38 | 显示全部楼层
png被压缩之后如何解码,用c#编写
csharp

using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        // 读取压缩的PNG图像文件
        string compressedImagePath = "compressed_image.png";
        Image compressedImage = Image.FromFile(compressedImagePath);

        // 创建新的Bitmap对象,并将压缩的图像绘制到其中
        Bitmap bitmap = new Bitmap(compressedImage.Width, compressedImage.Height);
        using (Graphics graphics = Graphics.FromImage(bitmap))
        {
            graphics.DrawImage(compressedImage, 0, 0);
        }

        // 保存解码后的图像为新的PNG文件
        string decodedImagePath = "decoded_image.png";
        bitmap.Save(decodedImagePath, System.Drawing.Imaging.ImageFormat.Png);

        // 释放资源
        compressedImage.Dispose();
        bitmap.Dispose();

        Console.WriteLine("解码完成并保存为新的图像文件。");
    }
}
请确保在运行此代码之前,将压缩的PNG图像文件放置在与代码文件相同的目录中,并将其命名为"compressed_image.png"。解码后的图像将保存为"decoded_image.png"。
 楼主| 发表于 2023-7-5 16:20:43 | 显示全部楼层
png如何ImageCodecInfo压缩图像质量,用c#编写
 楼主| 发表于 2023-7-5 16:23:01 | 显示全部楼层
在C#中,可以使用System.Drawing命名空间中的ImageCodecInfo和EncoderParameters类来压缩图像质量。以下是一个示例代码:

csharp

using System.Drawing;
using System.Drawing.Imaging;

public void CompressImage(string inputImagePath, string outputImagePath, long quality)
{
    // 获取原始图像
    Image inputImage = Image.FromFile(inputImagePath);

    // 获取JPEG编码器
    ImageCodecInfo jpegEncoder = GetEncoder(ImageFormat.Jpeg);

    // 创建压缩参数
    EncoderParameters encoderParameters = new EncoderParameters(1);
    encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, quality);

    // 保存压缩后的图像
    inputImage.Save(outputImagePath, jpegEncoder, encoderParameters);
}

private ImageCodecInfo GetEncoder(ImageFormat format)
{
    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();

    foreach (ImageCodecInfo codec in codecs)
    {
        if (codec.FormatID == format.Guid)
        {
            return codec;
        }
    }

    return null;
}

在上面的代码中,CompressImage方法接受输入图像路径、输出图像路径和压缩质量作为参数。它首先加载输入图像,然后获取JPEG编码器。然后,它创建一个EncoderParameters对象,并将压缩质量作为参数传递给EncoderParameters对象。最后,它使用Save方法将压缩后的图像保存到输出路径。

GetEncoder方法用于获取指定图像格式的编码器。它遍历所有可用的编码器,并根据格式的GUID匹配编码器。"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|几何尺寸与公差论坛

GMT+8, 2024-3-4 18:26 , Processed in 0.038973 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表