图片旋转和Base64措置惩罚惩罚

时间:2022-04-10 07:06:20

(1)按角度旋转

/// <summary> /// 按照角度旋转图标 /// </summary> /// <param></param> public Image RotateImg(Image img, float angle) { //通过Png图片设置图片透明,改削旋转图片变黑问题。 int width = img.Width; int height = img.Height; //角度 Matrix mtrx = new Matrix(); mtrx.RotateAt(angle, new PointF((width / 2), (height / 2)), MatrixOrder.Append); //得到旋转后的矩形 GraphicsPath path = new GraphicsPath(); path.AddRectangle(new RectangleF(0f, 0f, width, height)); RectangleF rct = path.GetBounds(mtrx); //生成方针位图 Bitmap devImage = new Bitmap((int)(rct.Width), (int)(rct.Height)); Graphics g = Graphics.FromImage(devImage); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //计算偏移量 Point Offset = new Point((int)(rct.Width - width) / 2, (int)(rct.Height - height) / 2); //结构图像显示区域:让图像的中心与窗口的中心点一致 Rectangle rect = new Rectangle(Offset.X, Offset.Y, (int)width, (int)height); Point center = new Point((int)(rect.X + rect.Width / 2), (int)(rect.Y + rect.Height / 2)); g.TranslateTransform(center.X, center.Y); g.RotateTransform(angle); //恢复图像在水安然安祥垂直标的目的的平移 g.TranslateTransform(-center.X, -center.Y); g.DrawImage(img, rect); //重至绘图的所有调动 g.ResetTransform(); g.Save(); g.Dispose(); path.Dispose(); return devImage; }

(2)按弧度旋转

/// <summary> /// 第二种要领 /// </summary> /// <param></param> /// <param></param> /// <returns></returns> public Image RotateImg2(Image b, float angle) { angle = angle % 360; //弧度转换 double radian = angle * Math.PI / 180.0; double cos = Math.Cos(radian); double sin = Math.Sin(radian); //原图的宽和高 int w = b.Width; int h = b.Height; int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin))); int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos))); //方针位图 Image dsImage = new Bitmap(W, H); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //计算偏移量 Point Offset = new Point((W - w) / 2, (H - h) / 2); //结构图像显示区域:让图像的中心与窗口的中心点一致 Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h); Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2); g.TranslateTransform(center.X, center.Y); g.RotateTransform(360-angle); //恢复图像在水安然安祥垂直标的目的的平移 g.TranslateTransform(-center.X, -center.Y); g.DrawImage(b, rect); //重至绘图的所有调动 g.ResetTransform(); g.Save(); g.Dispose(); //dsImage.Save("yuancd.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); return dsImage; }

以上参考:基于C#的两种图片旋转要领

别的,可以直接使用已封装的要领:

/// <summary> /// 旋转(操作已封装的要领) /// </summary> /// <param>图片路径</param> /// <param>旋转方法</param> /// <returns></returns> public bool KiRotate(string path, RotateFlipType rotateFlipType) { try { using (Bitmap bitmap = new Bitmap(path)) { // 顺时针旋转90度 RotateFlipType.Rotate90FlipNone // 逆时针旋转90度 RotateFlipType.Rotate270FlipNone // 程度翻转 RotateFlipType.Rotate180FlipY // 垂直翻转 RotateFlipType.Rotate180FlipX bitmap.RotateFlip(rotateFlipType); bitmap.Save(path); } return true; } catch(Exception ex) { return false; } }

Base64措置惩罚惩罚

最常见的用于传输8Bit字节码的编码方法之一,Base64编码是从二进制到字符的过程,可用于在HTTP环境下通报较长的标识信息。

每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,构成四个8Bit的字节,也就是说,转换后的字符串理论大将要比本来的长1/3

个字符酿成4个字符,每76个字符加一个换行符,,最后的结束符也要措置惩罚惩罚