iT邦幫忙

0

Bitmap Resize 圖片直向照片被轉向

用這個code 想去縮小圖片
卻一直被轉向Q_Q
如何給新size 又維持直向圖片呢

public static Bitmap SizeImage(Image srcImage, int iWidth, int iHeight)
{
try
{
// 要儲存到的圖片
Bitmap b = new Bitmap(srcImage, iWidth, iHeight);
Graphics g = Graphics.FromImage(b);
// 插值演算法的質量
// g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(srcImage, new Rectangle(0, 0, iWidth, iHeight), new Rectangle(0, 0, srcImage.Width, srcImage.Height), GraphicsUnit.Pixel);
g.Dispose();
return b;
}
catch (Exception)
{
return null;
}
}

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-11-17 07:31:37

參考微軟官方範例
閱讀時間:2分鐘

魚仔 iT邦新手 5 級 ‧ 2020-11-20 10:40:12 檢舉

謝謝 後來發現是圖片手機有記憶位置點這樣就不會被翻轉
Image img = Image.FromFile(imgSourceFilePathTestInput);

                int exifOrientationID = 0x112; //274
                if (img.PropertyIdList.Contains(exifOrientationID))
                {
                    var prop = img.GetPropertyItem(exifOrientationID);
                    int val = BitConverter.ToUInt16(prop.Value, 0);
                    var rot = RotateFlipType.RotateNoneFlipNone;

                    if (val == 3 || val == 4)
                        rot = RotateFlipType.Rotate180FlipNone;
                    else if (val == 5 || val == 6)
                        rot = RotateFlipType.Rotate90FlipNone;
                    else if (val == 7 || val == 8)
                        rot = RotateFlipType.Rotate270FlipNone;

                    if (val == 2 || val == 4 || val == 5 || val == 7)
                        rot |= RotateFlipType.RotateNoneFlipX;

                    if (rot != RotateFlipType.RotateNoneFlipNone)
                        img.RotateFlip(rot);
0
tp6m60
iT邦新手 5 級 ‧ 2020-11-17 09:30:40
v

                 
                 
0
japhenchen
iT邦大師 1 級 ‧ 2020-11-17 10:53:53

我就懶,不愛用DrawImage

        private Bitmap SizeImage(Image srcImage, int iWidth)
        {
            try
            {
                // 要儲存到的圖片
                // 先求得原始圖片的寬高比
                double Ratio = (double)(srcImage.Height / srcImage.Width);
                // 不使用iHeight,用上行算的
                Size newSize = new Size(iWidth, (int)(Ratio * iWidth)); 
                // 不用DrawImage
                var newBitmap = new Bitmap(srcImage, newSize);
                return newBitmap;
            }
            catch (Exception)
            {
                return null;
            }
        }

用法

            Bitmap bmp = SizeImage( new Bitmap(@"test.jpg"),300); // 只指定WIDTH
            bmp.Save("resized.jpg");

我要發表回答

立即登入回答