C#中的图像缩小比例

时间:2018-04-25 10:30:57

标签: c# image image-processing image-compression lanczos

我正在将图像大小减小到8 * 8以计算平均散列以使用C#查找类似的图像。我打算使用Lanczos算法来减小图像大小,因为它似乎可以提供良好的结果(从互联网读取以及python图像哈希算法使用相同)。你能指点我在哪里可以找到用C#实现的Lanczos算法吗?还有比Lanczos更好的方法。 请在这里帮忙。

由于

2 个答案:

答案 0 :(得分:1)

不知道算法,但调整图像大小的方法相当简单:

    public static Bitmap ResizeImage(Image image, Int32 width, Int32 height)
    {
        Bitmap destImage = new Bitmap(width, height);
        using (Graphics graphics = Graphics.FromImage(destImage))
            graphics.DrawImage(image, new Rectangle(0, 0, width, height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
        return destImage;
    }

使用此功能,您可以加载原始图像,调整其大小,并将调整后的图像保存到磁盘:

public void ResizeImageFromPath(String imagePath, Int32 width, Int32 height, String savePath)
{
    if (savePath == null)
        savePath = imagePath;
    Byte[] bytes = File.ReadAllBytes(imagePath);
    using (MemoryStream stream = new MemoryStream(bytes))
    using (Bitmap image = new Bitmap(stream))
    using (Bitmap resized = ResizeImage(image, newwidth, newheight))
        resized.Save(savePath, ImageFormat.Png);
}

答案 1 :(得分:0)

   using (Bitmap bitmap = (Bitmap)Image.FromFile("file.jpg"))
    {
        using (Bitmap newBitmap = new Bitmap(bitmap))
        {
            newBitmap.SetResolution(8, 8);
            newBitmap.Save("file_64.jpg", ImageFormat.Jpeg);
        }
    }

您可以更改ImageFormat - 功能中的Save以获得另一种压缩率。