본문 바로가기

c#

c# image to byte 이미지 바이트로 전환, 이미지 압축 하는 법

이미지를 바이트로 전환하여 압축하는 방법입니다.

EncoderParameter클래스를 사용하여 압축의 퀄리티를 지정 할 수 있습니다.

0L과 가까울수록 이미지가 더 압축되어 깨짐현상이 있을 수 있습니다.

아래는 이미지를 선택하여 압축을 한 복사본을 만드는 예제 코드입니다.

 

        public FrmImagecs()
        {
            InitializeComponent();
            OpenFileDialog dlg = new OpenFileDialog();

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                dlg.Filter = "jpg files (*.jpg)|*.jpg|jpeg files (*.jpeg)|*.jpeg|bmp files (*.bmp)|*.bmp|gif files (*.gif)|*.gif|png files (*.png)|*.png|All files (*.*)|*.*";

                Bitmap bmp = new Bitmap(dlg.FileName);

                ImageConverter imgConverter = new ImageConverter();
                byte[] imgByte = (byte[])imgConverter.ConvertTo(bmp, typeof(byte[]));
                ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
                EncoderParameters myEncoderParameters = new EncoderParameters(1);
                EncoderParameter myEncoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 25L);

                myEncoderParameters.Param[0] = myEncoderParameter;

                string path = @"c:\catCopy.jpg";

                bmp.Save(path, jpgEncoder, myEncoderParameters);

            }
            
        }
        private ImageCodecInfo GetEncoder(ImageFormat format)
        {
            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
            foreach (ImageCodecInfo codec in codecs)
            {
                if (codec.FormatID == format.Guid)
                {
                    return codec;
                }
            }
            return null;
        }

 

테스트결과 

cat을 압축한 catcopy

cat.jpg를 압축한 catcopy의 사이즈를 보면 대략 4분의 1 수준으로 사이즈가 작아졌습니다.