当前位置: 移动技术网 > IT编程>开发语言>.net > c# 制作正方形图片

c# 制作正方形图片

2018年10月15日  | 移动技术网IT编程  | 我要评论
using system;
using system.collections.generic;
using system.drawing;
using system.drawing.drawing2d;
using system.drawing.imaging;
using system.linq;
using system.text;
using system.threading.tasks;

namespace treads
{
    /// <summary>
    /// 制作小正方形
    /// </summary>
    class class3
    {
        private string srcfilename = @"x";//获取图片的路径
        private string srcfilename1 = @"x";//要保持图片的新路径

      

        /// <summary>
        /// 保存图片
        /// </summary>
        /// <param name="image">image 对象</param>
        /// <param name="savepath">保存路径</param>
        /// <param name="ici">指定格式的编解码参数</param>
        private static void saveimage(image image, string savepath, imagecodecinfo ici)
        {
            //设置 原图片 对象的 encoderparameters 对象
            encoderparameters parameters = new encoderparameters(1);
            parameters.param[0] = new encoderparameter(system.drawing.imaging.encoder.quality, ((long)100));
            image.save(savepath, ici, parameters);
            parameters.dispose();
        }

        /// <summary>
        /// 获取图像编码解码器的所有相关信息
        /// </summary>
        /// <param name="mimetype">包含编码解码器的多用途网际邮件扩充协议 (mime) 类型的字符串</param>
        /// <returns>返回图像编码解码器的所有相关信息</returns>
        private static imagecodecinfo getcodecinfo(string mimetype)
        {
            imagecodecinfo[] codecinfo = imagecodecinfo.getimageencoders();
            foreach (imagecodecinfo ici in codecinfo)
            {
                if (ici.mimetype == mimetype)
                    return ici;
            }
            return null;
        }

        /// <summary>
        /// 计算新尺寸
        /// </summary>
        /// <param name="width">原始宽度</param>
        /// <param name="height">原始高度</param>
        /// <param name="maxwidth">最大新宽度</param>
        /// <param name="maxheight">最大新高度</param>
        /// <returns></returns>
        private static size resizeimage(int width, int height, int maxwidth, int maxheight)
        {
            //此次2012-02-05修改过=================
            if (maxwidth <= 0)
                maxwidth = width;
            if (maxheight <= 0)
                maxheight = height;
            //以上2012-02-05修改过=================
            decimal max_width = (decimal)maxwidth;
            decimal max_height = (decimal)maxheight;
            decimal aspect_ratio = max_width / max_height;

            int newwidth, newheight;
            decimal originalwidth = (decimal)width;
            decimal originalheight = (decimal)height;

            if (originalwidth > max_width || originalheight > max_height)
            {
                decimal factor;
                // determine the largest factor 
                if (originalwidth / originalheight > aspect_ratio)
                {
                    factor = originalwidth / max_width;
                    newwidth = convert.toint32(originalwidth / factor);
                    newheight = convert.toint32(originalheight / factor);
                }
                else
                {
                    factor = originalheight / max_height;
                    newwidth = convert.toint32(originalwidth / factor);
                    newheight = convert.toint32(originalheight / factor);
                }
            }
            else
            {
                newwidth = width;
                newheight = height;
            }
            return new size(newwidth, newheight);
        }

        /// <summary>
        /// 得到图片格式
        /// </summary>
        /// <param name="name">文件名称</param>
        /// <returns></returns>
        public static imageformat getformat(string name)
        {
            string ext = name.substring(name.lastindexof(".") + 1);
            switch (ext.tolower())
            {
                case "jpg":
                case "jpeg":
                    return imageformat.jpeg;
                case "bmp":
                    return imageformat.bmp;
                case "png":
                    return imageformat.png;
                case "gif":
                    return imageformat.gif;
                default:
                    return imageformat.jpeg;
            }
        }
     

        /// <summary>
        /// 制作小正方形
        /// </summary>
        /// <param name="image">图片对象</param>
        /// <param name="newfilename">新地址</param>
        /// <param name="newsize">长度或宽度</param>
        public static void makesquareimage(image image, string newfilename, int newsize)
        {
            int i = 0;
            int width = image.width;
            int height = image.height;
            if (width > height)
                i = height;
            else
                i = width;

            bitmap b = new bitmap(newsize, newsize);

            try
            {
                graphics g = graphics.fromimage(b);
                //设置高质量插值法
                g.interpolationmode = interpolationmode.highqualitybicubic;
                //设置高质量,低速度呈现平滑程度
                g.smoothingmode = smoothingmode.antialias;
                g.pixeloffsetmode = pixeloffsetmode.highquality;
                //清除整个绘图面并以透明背景色填充
                g.clear(color.transparent);
                if (width < height)
                    g.drawimage(image, new rectangle(0, 0, newsize, newsize), new rectangle(0, (height - width) / 2, width, width), graphicsunit.pixel);
                else
                    g.drawimage(image, new rectangle(0, 0, newsize, newsize), new rectangle((width - height) / 2, 0, height, height), graphicsunit.pixel);

                saveimage(b, newfilename, getcodecinfo("image/" + getformat(newfilename).tostring().tolower()));
            }
            finally
            {
                image.dispose();
                b.dispose();
            }
        }

        /// <summary>
        /// 制作小正方形
        /// </summary>
        /// <param name="filename">图片文件名</param>
        /// <param name="newfilename">新地址</param>
        /// <param name="newsize">长度或宽度</param>
        public static void makesquareimage(string filename,string newfilename, int newsize)
        {
            makesquareimage(image.fromfile(filename), newfilename, newsize);
        }
    }
}

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网