C# - 图片旋转和Base64处理

旋转

(1)按角度旋转

    /// <summary>
    /// 根据角度旋转图标
    /// </summary>
    /// <param name="img"></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 name="b"></param>
    /// <param name="angle"></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 name="path">图片路径</param>
/// <param name="rotateFlipType">旋转方式</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个字符加一个换行符,最后的结束符也要处理

原文地址:https://www.cnblogs.com/wjcx-sqh/p/8143508.html

时间: 2024-10-06 20:45:03

C# - 图片旋转和Base64处理的相关文章

基于HTML5+CSS3的图片旋转、无限滚动、文字跳动特效

本文分享几种基于HTML5+CSS3实现的一些动画特效:图片旋转.无限滚动.文字跳动;实现起来均比较容易,动手来试试! 一.图片旋转 效果图如下: 这个效果实现起来其实并不困难.代码清单如下: <style type="text/css"> #liu{ width:280px; height: 279px; background: url(shishi.png) no-repeat; border-radius:140px; -webkit-animation:run 6s

jQuery图片旋转展示收缩效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

造轮子:C#中将图片转化成base64字符串

厂址:http://www.cnblogs.com/yunfeifei/p/4165351.html 1.在C#中将图片转化成base64字符串: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ConvertImgToBase64 { class Program { static void Main(string[]

js图片旋转

<script type="text/javascript" language="javascript"> function rotate(id, angle, whence) { var p = document.getElementById(id); if (!whence) { p.angle = ((p.angle == undefined ? 0 : p.angle) + angle) % 360; } else { p.angle = ang

图片旋转js代码

function rotateImage(imgId) { imageToRotate = document.getElementById(imgId); imageToRotate.style.filter= "progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand')"; rotate(); } var imageToRotate; var degreeToRotate=0; function rotat

【图像处理】基于OpenCV底层实现的图片旋转

image processing 系列 [图像处理]直方图匹配 [图像处理]高斯滤波.中值滤波.均值滤波 图片旋转,本质上是对旋转后的图片中每一个像素点计算在原图的位置.然后照搬过来就好. (多说一句.假设计算出来在原图中的位置不是整数而是小数,由于像素点个数都是整数,就须要小数到整数的转换. 这个转换过程是有讲究的,须要用到插值:近期邻插值.双线性插值等等.这里我使用的是最简单的近期邻插值.即对小数四舍五入成整数.C/C++ 实现四舍五入见这里) 完整 github 代码:image-proc

css 中图片旋转,倾斜,位移,平滑

在开发中,我们常常需要对图片有一些绚丽的效果,比如是图片旋转,平移,倾斜等.其实这些在css3中都已经存在,整理下作为demo,以后参考使用,也希望供大家交流学习.如果不足,多多指导. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>图片效果</title> <style type="text/css"> *{

Android图片旋转,缩放,位移,倾斜,对称完整示例(二)——Bitmap.createBitmap()和Matrix

MainActivity如下: package cc.c; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.widget.ImageView; /** * Demo描述: * 利用B

强大!HTML5 3D美女图片旋转实现教程

又到周末,来弄点HTML5的特效玩玩,今天要折腾的是HTML5 3D图片特效,图片在垂直方向上被分割成一条条小矩形,在图片上拖动鼠标即可让每一个小矩形旋转,从而让图片形成3D立体的效果,来看看效果图: 大家也可以在这里看到具体的DEMO演示. 下面我们来分析一下实现这款HTML5 3D图片旋转特效的源代码,这里我们引用了知名的JS动画框架TweenMax.js. 先来看看HTML代码: <ul id="level0" class='cube'> <li class='