How to resize an image in C# to a certain hard-disk size?

前端 未结 5 1528
野性不改
野性不改 2020-12-16 19:46

How to resize an image an image in C# to a certain hard-disk size, like 2MiB? Is there a better way than trial and error (even if it\'s approximate, of course).

Any

5条回答
  •  旧巷少年郎
    2020-12-16 20:13

    You can calculate an approximate information level for the image by taking the original image size divided by the number of pixels:

    info = fileSize / (width * height);
    

    I have an image that is 369636 bytes and 1200x800 pixels, so it uses ~0.385 bytes per pixel.

    I have a smaller version that is 101111 bytes and 600x400 pixels, so it uses ~0.4213 bytes per pixel.

    When you shrink an image you will see that it generally will contain slightly more information per pixel, in this case about 9% more. Depending on your type of images and how much you shrink them, you should be able to calculate an average for how much the information/pixel ration increases (c), so that you can calculate an approximate file size:

    newFileSize = (fileSize / (width * height)) * (newWidth * newHeight) * c
    

    From this you can extract a formula for how large you have to make an image to reach a specific file size:

    newWidth * newHeight = (newFileSize / fileSize) * (width * height) / c
    

    This will get you pretty close to the desired file size. If you want to get closer you can resize the image to the calculated size, compress it and calculate a new bytes per pixel value from the file size that you got.

提交回复
热议问题