zoukankan      html  css  js  c++  java
  • 二进制流操作

    /// <summary>
    /// 给二进制流添加水印文字并返回
    /// </summary>
    /// <param name="photo">二进制流</param>
    /// <param name="watermarkText">水印文字</param>
    /// <param name="watermarkStatus">图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中 9=右下</param>
    /// <param name="quality">附加水印图片质量,0-100</param>
    /// <param name="fontsize">字体大小</param>
    /// <param name="fontname">字体</param>
    /// <returns></returns>
    public byte[] AddWaterText(Byte[] photo, string watermarkText,
    int watermarkStatus, int quality, int fontsize, string fontname)
    {
    Image img = Image.FromStream(new System.IO.MemoryStream(photo));
    
    //将图片流转换为缩略图并固定尺寸
    Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
    Image imgs=img.GetThumbnailImage(300, 300, callb, IntPtr.Zero);
    
    Graphics grap = Graphics.FromImage(imgs);
    Font drawFont = new Font(fontname, fontsize, FontStyle.Regular, GraphicsUnit.Pixel);
    SizeF crSize;
    crSize = grap.MeasureString(watermarkText, drawFont);
    float xpos = 0;
    float ypos = 0;
    switch (watermarkStatus)
    {
    case 1:
    xpos = (float)imgs.Width * (float).01;
    ypos = (float)imgs.Height * (float).01;
    break;
    case 2:
    xpos = ((float)imgs.Width * (float).50) - (crSize.Width / 2);
    ypos = (float)imgs.Height * (float).01;
    break;
    case 3:
    xpos = ((float)imgs.Width * (float).99) - crSize.Width;
    ypos = (float)imgs.Height * (float).01;
    break;
    case 4:
    xpos = (float)imgs.Width * (float).01;
    ypos = ((float)imgs.Height * (float).50) - (crSize.Height / 2);
    break;
    case 5:
    xpos = ((float)imgs.Width * (float).50) - (crSize.Width / 2);
    ypos = ((float)imgs.Height * (float).50) - (crSize.Height / 2);
    break;
    case 6:
    xpos = ((float)imgs.Width * (float).99) - crSize.Width;
    ypos = ((float)imgs.Height * (float).50) - (crSize.Height / 2);
    break;
    case 7:
    xpos = (float)imgs.Width * (float).01;
    ypos = ((float)imgs.Height * (float).99) - crSize.Height;
    break;
    case 8:
    xpos = ((float)imgs.Width * (float).50) - (crSize.Width / 2);
    ypos = ((float)imgs.Height * (float).99) - crSize.Height;
    break;
    case 9:
    xpos = ((float)imgs.Width * (float).99) - crSize.Width;
    ypos = ((float)imgs.Height * (float).99) - crSize.Height;
    break;
    }
    
    grap.DrawString(watermarkText, drawFont, new SolidBrush(Color.Blue), xpos, ypos);
    
    byte[] bt = null;
    using (MemoryStream mostream = new MemoryStream())
    {
    Bitmap bmp = new Bitmap(imgs);
    bmp.Save(mostream, System.Drawing.Imaging.ImageFormat.Png);//将图像以指定的格式存入缓存内存流
    bt = new byte[mostream.Length];
    mostream.Position = 0;//设置留的初始位置
    mostream.Read(bt, 0, Convert.ToInt32(bt.Length));
    }
    return bt;
    }
    
     
    
    调用方式:
    
    //给二进制流加水印文字    
    
    byte[] imgData = AddWaterText(item.SignetName, "仅限预览", 5, 50, 15, "宋体");
    
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    
    /// <summary>
    /// 将二进制流转换为base64
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public string ByteToByte64String(byte[] data)
    {
    string img = Convert.ToBase64String(data);
    return img;
    }
    
     
    
    调用方式:
    
    //二进制流转换为base64
    
    byte[] imgData=new byte[0];
    
    string imgBase64=this.ByteToByte64String(imgData);
    
    前台界面显示
    
    let img="data:image/png;base64,"+imgBase64
    
    <img src=img/>
    
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    
    /// <summary>
    /// 图片转换二进制流方法
    /// </summary>
    /// <param name="path">文件路径</param>
    /// <returns></returns>
    private byte[] Imgbytefromimg(string path)
    {
    
    //方式一
    //FileStream f = new FileStream(path, FileMode.Open, FileAccess.Read);
    //Byte[] imgByte = new Byte[f.Length];//把图片转成 Byte型 二进制流 
    //f.Read(imgByte, 0, imgByte.Length);//把二进制流读入缓冲区 
    //f.Close();
    //return imgByte;
    
    //方式二
    
    byte[] bytes = System.IO.File.ReadAllBytes(path); //读取文件到byte数组
    return bytes;
    }
    

      

  • 相关阅读:
    js高级程序设计 笔记 --- 引用类型
    es6 简单封装一个 省市县三级下拉框
    js中元素、触点等各种距离的总结
    css实现视觉差的滚动
    js的节流和防抖
    js关于原型,原型链的面试题
    深入理解promise
    vue 同一个组件的跳转, 返回时保留原来的下拉位置
    es6 封装一个登录注册的验证滑块
    洛谷P3203 [HNOI2010]弹飞绵羊(lct)
  • 原文地址:https://www.cnblogs.com/YYkun/p/10148821.html
Copyright © 2011-2022 走看看