Rumah pembangunan bahagian belakang Tutorial C#.Net IO帮助类是什么?IO帮助类的实例介绍(附代码)

IO帮助类是什么?IO帮助类的实例介绍(附代码)

Oct 24, 2018 pm 03:25 PM
io

本篇文章给大家带来的内容是介绍IO帮助类是什么?IO帮助类的实例介绍(附代码)。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

using System;
using System.IO;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Xml.Serialization;

namespace ZMM.Core
{
    /// <summary>
    /// IO帮助类
    /// </summary>
    public class IOHelper
    {
        //是否已经加载了JPEG编码解码器
        private static bool _isloadjpegcodec = false;
        //当前系统安装的JPEG编码解码器
        private static ImageCodecInfo _jpegcodec = null;

        /// <summary>
        /// 获得文件物理路径
        /// </summary>
        /// <returns></returns>
        public static string GetMapPath(string path)
        {
            if (HttpContext.Current != null)
            {
                return HttpContext.Current.Server.MapPath(path);
            }
            else
            {
                return System.Web.Hosting.HostingEnvironment.MapPath(path);
            }
        }

        #region  序列化

        /// <summary>
        /// XML序列化
        /// </summary>
        /// <param name="obj">序列对象</param>
        /// <param name="filePath">XML文件路径</param>
        /// <returns>是否成功</returns>
        public static bool SerializeToXml(object obj, string filePath)
        {
            bool result = false;

            FileStream fs = null;
            try
            {
                fs = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                XmlSerializer serializer = new XmlSerializer(obj.GetType());
                serializer.Serialize(fs, obj);
                result = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (fs != null)
                    fs.Close();
            }
            return result;

        }

        /// <summary>
        /// XML反序列化
        /// </summary>
        /// <param name="type">目标类型(Type类型)</param>
        /// <param name="filePath">XML文件路径</param>
        /// <returns>序列对象</returns>
        public static object DeserializeFromXML(Type type, string filePath)
        {
            FileStream fs = null;
            try
            {
                fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                XmlSerializer serializer = new XmlSerializer(type);
                return serializer.Deserialize(fs);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (fs != null)
                    fs.Close();
            }
        }

        #endregion

        #region  水印,缩略图

        /// <summary>
        /// 获得当前系统安装的JPEG编码解码器
        /// </summary>
        /// <returns></returns>
        public static ImageCodecInfo GetJPEGCodec()
        {
            if (_isloadjpegcodec == true)
                return _jpegcodec;

            ImageCodecInfo[] codecsList = ImageCodecInfo.GetImageEncoders();
            foreach (ImageCodecInfo codec in codecsList)
            {
                if (codec.MimeType.IndexOf("jpeg") > -1)
                {
                    _jpegcodec = codec;
                    break;
                }

            }
            _isloadjpegcodec = true;
            return _jpegcodec;
        }

        /// <summary>
        /// 生成缩略图
        /// </summary>
        /// <param name="imagePath">图片路径</param>
        /// <param name="thumbPath">缩略图路径</param>
        /// <param name="width">缩略图宽度</param>
        /// <param name="height">缩略图高度</param>
        /// <param name="mode">生成缩略图的方式</param>   
        public static void GenerateThumb(string imagePath, string thumbPath, int width, int height, string mode)
        {
            Image image = Image.FromFile(imagePath);

            string extension = imagePath.Substring(imagePath.LastIndexOf(".")).ToLower();
            ImageFormat imageFormat = null;
            switch (extension)
            {
                case ".jpg":
                case ".jpeg":
                    imageFormat = ImageFormat.Jpeg;
                    break;
                case ".bmp":
                    imageFormat = ImageFormat.Bmp;
                    break;
                case ".png":
                    imageFormat = ImageFormat.Png;
                    break;
                case ".gif":
                    imageFormat = ImageFormat.Gif;
                    break;
                default:
                    imageFormat = ImageFormat.Jpeg;
                    break;
            }

            int toWidth = width > 0 ? width : image.Width;
            int toHeight = height > 0 ? height : image.Height;

            int x = 0;
            int y = 0;
            int ow = image.Width;
            int oh = image.Height;

            switch (mode)
            {
                case "HW"://指定高宽缩放(可能变形)           
                    break;
                case "W"://指定宽,高按比例             
                    toHeight = image.Height * width / image.Width;
                    break;
                case "H"://指定高,宽按比例
                    toWidth = image.Width * height / image.Height;
                    break;
                case "Cut"://指定高宽裁减(不变形)           
                    if ((double)image.Width / (double)image.Height > (double)toWidth / (double)toHeight)
                    {
                        oh = image.Height;
                        ow = image.Height * toWidth / toHeight;
                        y = 0;
                        x = (image.Width - ow) / 2;
                    }
                    else
                    {
                        ow = image.Width;
                        oh = image.Width * height / toWidth;
                        x = 0;
                        y = (image.Height - oh) / 2;
                    }
                    break;
                default:
                    break;
            }

            //新建一个bmp
            Image bitmap = new Bitmap(toWidth, toHeight);

            //新建一个画板
            Graphics g = Graphics.FromImage(bitmap);

            //设置高质量插值法
            g.InterpolationMode = InterpolationMode.High;

            //设置高质量,低速度呈现平滑程度
            g.SmoothingMode = SmoothingMode.HighQuality;

            //清空画布并以透明背景色填充
            g.Clear(Color.Transparent);

            //在指定位置并且按指定大小绘制原图片的指定部分
            g.DrawImage(image,
                        new Rectangle(0, 0, toWidth, toHeight),
                        new Rectangle(x, y, ow, oh),
                        GraphicsUnit.Pixel);

            try
            {
                bitmap.Save(thumbPath, imageFormat);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (g != null)
                    g.Dispose();
                if (bitmap != null)
                    bitmap.Dispose();
                if (image != null)
                    image.Dispose();
            }
        }

        /// <summary>
        /// 生成图片水印
        /// </summary>
        /// <param name="originalPath">源图路径</param>
        /// <param name="watermarkPath">水印图片路径</param>
        /// <param name="targetPath">保存路径</param>
        /// <param name="position">位置</param>
        /// <param name="opacity">透明度</param>
        /// <param name="quality">质量</param>
        public static void GenerateImageWatermark(string originalPath, string watermarkPath, string targetPath, int position, int opacity, int quality)
        {
            Image originalImage = null;
            Image watermarkImage = null;
            //图片属性
            ImageAttributes attributes = null;
            //画板
            Graphics g = null;
            try
            {

                originalImage = Image.FromFile(originalPath);
                watermarkImage = new Bitmap(watermarkPath);

                if (watermarkImage.Height >= originalImage.Height || watermarkImage.Width >= originalImage.Width)
                {
                    originalImage.Save(targetPath);
                    return;
                }

                if (quality < 0 || quality > 100)
                    quality = 80;

                //水印透明度
                float iii;
                if (opacity > 0 && opacity <= 10)
                    iii = (float)(opacity / 10.0F);
                else
                    iii = 0.5F;

                //水印位置
                int x = 0;
                int y = 0;
                switch (position)
                {
                    case 1:
                        x = (int)(originalImage.Width * (float).01);
                        y = (int)(originalImage.Height * (float).01);
                        break;
                    case 2:
                        x = (int)((originalImage.Width * (float).50) - (watermarkImage.Width / 2));
                        y = (int)(originalImage.Height * (float).01);
                        break;
                    case 3:
                        x = (int)((originalImage.Width * (float).99) - (watermarkImage.Width));
                        y = (int)(originalImage.Height * (float).01);
                        break;
                    case 4:
                        x = (int)(originalImage.Width * (float).01);
                        y = (int)((originalImage.Height * (float).50) - (watermarkImage.Height / 2));
                        break;
                    case 5:
                        x = (int)((originalImage.Width * (float).50) - (watermarkImage.Width / 2));
                        y = (int)((originalImage.Height * (float).50) - (watermarkImage.Height / 2));
                        break;
                    case 6:
                        x = (int)((originalImage.Width * (float).99) - (watermarkImage.Width));
                        y = (int)((originalImage.Height * (float).50) - (watermarkImage.Height / 2));
                        break;
                    case 7:
                        x = (int)(originalImage.Width * (float).01);
                        y = (int)((originalImage.Height * (float).99) - watermarkImage.Height);
                        break;
                    case 8:
                        x = (int)((originalImage.Width * (float).50) - (watermarkImage.Width / 2));
                        y = (int)((originalImage.Height * (float).99) - watermarkImage.Height);
                        break;
                    case 9:
                        x = (int)((originalImage.Width * (float).99) - (watermarkImage.Width));
                        y = (int)((originalImage.Height * (float).99) - watermarkImage.Height);
                        break;
                }

                //颜色映射表
                ColorMap colorMap = new ColorMap();
                colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
                colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);
                ColorMap[] newColorMap = { colorMap };

                //颜色变换矩阵,iii是设置透明度的范围0到1中的单精度类型
                float[][] newColorMatrix ={ 
                                            new float[] {1.0f,  0.0f,  0.0f,  0.0f, 0.0f},
                                            new float[] {0.0f,  1.0f,  0.0f,  0.0f, 0.0f},
                                            new float[] {0.0f,  0.0f,  1.0f,  0.0f, 0.0f},
                                            new float[] {0.0f,  0.0f,  0.0f,  iii, 0.0f},
                                            new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}
                                           };
                //定义一个 5 x 5 矩阵
                ColorMatrix matrix = new ColorMatrix(newColorMatrix);

                //图片属性
                attributes = new ImageAttributes();
                attributes.SetRemapTable(newColorMap, ColorAdjustType.Bitmap);
                attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

                //画板
                g = Graphics.FromImage(originalImage);
                //绘制水印
                g.DrawImage(watermarkImage, new Rectangle(x, y, watermarkImage.Width, watermarkImage.Height), 0, 0, watermarkImage.Width, watermarkImage.Height, GraphicsUnit.Pixel, attributes);
                //保存图片
                EncoderParameters encoderParams = new EncoderParameters();
                encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, new long[] { quality });
                if (GetJPEGCodec() != null)
                    originalImage.Save(targetPath, _jpegcodec, encoderParams);
                else
                    originalImage.Save(targetPath);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (g != null)
                    g.Dispose();
                if (attributes != null)
                    attributes.Dispose();
                if (watermarkImage != null)
                    watermarkImage.Dispose();
                if (originalImage != null)
                    originalImage.Dispose();
            }
        }

        /// <summary>
        /// 生成文字水印
        /// </summary>
        /// <param name="originalPath">源图路径</param>
        /// <param name="targetPath">保存路径</param>
        /// <param name="text">水印文字</param>
        /// <param name="textSize">文字大小</param>
        /// <param name="textFont">文字字体</param>
        /// <param name="position">位置</param>
        /// <param name="quality">质量</param>
        public static void GenerateTextWatermark(string originalPath, string targetPath, string text, int textSize, string textFont, int position, int quality)
        {
            Image originalImage = null;
            //画板
            Graphics g = null;
            try
            {
                originalImage = Image.FromFile(originalPath);
                //画板
                g = Graphics.FromImage(originalImage);
                if (quality < 0 || quality > 100)
                    quality = 80;

                Font font = new Font(textFont, textSize, FontStyle.Regular, GraphicsUnit.Pixel);
                SizeF sizePair = g.MeasureString(text, font);

                float x = 0;
                float y = 0;

                switch (position)
                {
                    case 1:
                        x = (float)originalImage.Width * (float).01;
                        y = (float)originalImage.Height * (float).01;
                        break;
                    case 2:
                        x = ((float)originalImage.Width * (float).50) - (sizePair.Width / 2);
                        y = (float)originalImage.Height * (float).01;
                        break;
                    case 3:
                        x = ((float)originalImage.Width * (float).99) - sizePair.Width;
                        y = (float)originalImage.Height * (float).01;
                        break;
                    case 4:
                        x = (float)originalImage.Width * (float).01;
                        y = ((float)originalImage.Height * (float).50) - (sizePair.Height / 2);
                        break;
                    case 5:
                        x = ((float)originalImage.Width * (float).50) - (sizePair.Width / 2);
                        y = ((float)originalImage.Height * (float).50) - (sizePair.Height / 2);
                        break;
                    case 6:
                        x = ((float)originalImage.Width * (float).99) - sizePair.Width;
                        y = ((float)originalImage.Height * (float).50) - (sizePair.Height / 2);
                        break;
                    case 7:
                        x = (float)originalImage.Width * (float).01;
                        y = ((float)originalImage.Height * (float).99) - sizePair.Height;
                        break;
                    case 8:
                        x = ((float)originalImage.Width * (float).50) - (sizePair.Width / 2);
                        y = ((float)originalImage.Height * (float).99) - sizePair.Height;
                        break;
                    case 9:
                        x = ((float)originalImage.Width * (float).99) - sizePair.Width;
                        y = ((float)originalImage.Height * (float).99) - sizePair.Height;
                        break;
                }

                g.DrawString(text, font, new SolidBrush(Color.White), x + 1, y + 1);
                g.DrawString(text, font, new SolidBrush(Color.Black), x, y);

                //保存图片
                EncoderParameters encoderParams = new EncoderParameters();
                encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, new long[] { quality });
                if (GetJPEGCodec() != null)
                    originalImage.Save(targetPath, _jpegcodec, encoderParams);
                else
                    originalImage.Save(targetPath);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (g != null)
                    g.Dispose();
                if (originalImage != null)
                    originalImage.Dispose();
            }
        }

        #endregion
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci IO帮助类是什么?IO帮助类的实例介绍(附代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan ralat 'undefined: io.ReadAll' dalam golang? Bagaimana untuk menyelesaikan ralat 'undefined: io.ReadAll' dalam golang? Jun 25, 2023 am 10:01 AM

Semasa proses pembangunan menggunakan Golang, kami sering menghadapi beberapa ralat. Salah satu daripadanya ialah "undefined:io.ReadAll", ralat ini kebanyakannya disebabkan oleh menggunakan kaedah yang sudah lapuk. Artikel ini akan menerangkan cara menyelesaikan ralat ini. Mula-mula, mari kita lihat mengapa ralat ini berlaku. Sebelum golang1.15, tiada kaedah ReadAll dalam pakej io. Apabila kami menggunakan kaedah ini, pengkompil akan menggesa "undefined:io.Re

Gunakan fungsi io/ioutil.WriteFile untuk menulis rentetan pada fail dan menetapkan kebenaran fail dan format lekukan Gunakan fungsi io/ioutil.WriteFile untuk menulis rentetan pada fail dan menetapkan kebenaran fail dan format lekukan Jul 24, 2023 pm 06:21 PM

Gunakan fungsi io/ioutil.WriteFile untuk menulis rentetan pada fail, dan tetapkan kebenaran fail dan format lekukan Dalam bahasa Go, anda boleh menulis rentetan ke fail dengan mudah menggunakan fungsi WriteFile dalam pakej io/ioutil. Pada masa yang sama, kami juga boleh menetapkan kebenaran fail dan format lekukan untuk memenuhi keperluan yang berbeza. Berikut ialah contoh kod yang menunjukkan cara menggunakan fungsi WriteFile untuk menulis ke fail dan menetapkan kebenaran dan format lekukan: packagemainim

Pertempuran praktikal: ujian baca dan tulis io cakera keras pada Linux Pertempuran praktikal: ujian baca dan tulis io cakera keras pada Linux Feb 19, 2024 pm 03:40 PM

Concept fio, juga dikenali sebagai FlexibleIOTester, ialah aplikasi yang ditulis oleh JensAxboe. Jens ialah penyelenggara blockIOsubsystem dalam LinuxKernel. FIO ialah alat yang digunakan untuk menguji sistem fail rangkaian dan prestasi cakera Ia sering digunakan untuk mengesahkan model mesin dan membandingkan prestasi sistem fail. Ia secara automatik menghantar arahan fio ke senarai mesin kluster dan mengumpul IOPS untuk fail kecil dan data pemprosesan untuk fail besar. rw=[mode]rwmixwrite=30 Dalam mod baca dan tulis bercampur, menulis akaun untuk 30% baca berurutan baca tulis berurutan tulis baca tulis berurutan bercampur baca dan tulis randwrite tulis rawak r

Bagaimana untuk menyelesaikan ralat 'undefined: io.TeeReader' dalam golang? Bagaimana untuk menyelesaikan ralat 'undefined: io.TeeReader' dalam golang? Jun 25, 2023 am 09:51 AM

Apabila membangun dengan golang, kita sering menghadapi pelbagai masalah dan mesej ralat. Salah satu masalah biasa ialah ralat "undefined:io.TeeReader". Ralat ini biasanya berlaku apabila program disusun, dan kadangkala ia boleh mengecewakan. Artikel ini akan memperkenalkan cara untuk menyelesaikan masalah ini supaya anda dapat menjalankan kerja pembangunan golang dengan lancar. Mula-mula, mari kita lihat apa sebenarnya maksud ralat ini. apabila kita menggunakan

Apakah maksud linux io? Apakah maksud linux io? Mar 24, 2023 am 09:43 AM

Linux io merujuk kepada operasi fail dalam Linux, fail ialah satu siri aliran binari, jadi semasa pertukaran maklumat, kita semua melakukan operasi penghantaran dan penerimaan data pada aliran ini. kerana Linux menggunakan mekanisme memori maya, jadi kernel mesti diminta melalui panggilan sistem untuk menyelesaikan operasi IO.

Kemahiran operasi fail dan IO dalam Java Kemahiran operasi fail dan IO dalam Java Jun 08, 2023 am 08:25 AM

Dalam pengaturcaraan Java, selalunya perlu melakukan operasi IO pada fail. Operasi IO fail melibatkan operasi seperti membaca dan menulis fail, mencipta direktori, dan memadam fail. Artikel ini akan memperkenalkan beberapa teknik operasi IO fail biasa dan cara menggunakannya dalam program Java. 1. Laluan fail Untuk mengendalikan fail dan direktori dalam Java, anda perlu menyediakan laluan fail. Laluan fail boleh dibahagikan kepada laluan mutlak dan laluan relatif. Laluan mutlak ialah laluan penuh ke fail dalam sistem fail, bermula dengan direktori akar. Laluan relatif ialah laluan ke fail berbanding dengan direktori kerja semasa. Jawa

Gambaran keseluruhan model Java IO dan rangka kerja Netty Gambaran keseluruhan model Java IO dan rangka kerja Netty Apr 22, 2023 pm 02:34 PM

Apakah itu Netty asynchronous? Ia adalah rangka kerja rangkaian yang didorong oleh peristiwa yang digunakan untuk membangunkan program IO rangkaian berprestasi tinggi dengan cepat Ia terutamanya bertujuan untuk aplikasi konkurensi tinggi untuk Pelanggan di bawah protokol TCP Rangka kerja NIO, sesuai untuk komunikasi pelayan, dsb. Senario tak segerak: menghantar permintaan tanpa menunggu jawapan, program diteruskan. Didorong oleh peristiwa: peristiwa sambungan atau peristiwa pemutusan sambungan, atau peristiwa baca atau peristiwa tulis, dan pemprosesan seterusnya selepas peristiwa itu berlaku. Aplikasi biasa Netty: rangka kerja rpc berprestasi tinggi digunakan untuk panggilan perkhidmatan jauh (proses), seperti Dubbo. Industri permainan, interaksi data halaman. Bidang data besar seperti Hadoop komunikasi berprestasi tinggi dan komponen siri (AVRO). Pemahaman mudah model IO ialah menggunakan pas apa

Apakah operasi baca dan tulis penciptaan aliran Java IO? Apakah operasi baca dan tulis penciptaan aliran Java IO? May 14, 2023 am 08:22 AM

Konsep aliran IO pada mulanya boleh difahami sebagai penghantaran data Kami meletakkan satu set data ke dalam: 1234567 dan memindahkannya dari fail hello ke fail haha ​​Jika anda menggunakan kaedah program untuk memindahkan, anda perlu memindahkannya satu demi satu, maksudnya, ia adalah penghantaran bait demi bait Kami hanya boleh meneruskan atau membaca satu bait pada satu masa. Ini adalah proses umum aliran io jenis fail. Seperti: fail teks, gambar, lagu mp3, video, dsb. Oleh kerana strim io dibaca bait demi bait, kita perlu menggunakan pembolehubah bait tunggal bait untuk mendapatkan panjang. Jika anda mendapat terlalu banyak kandungan, anda perlu menggunakan tatasusunan yang sepadan. Kaedah yang sepadan dengan aliran io perlu ditulis dalam semua kaedah aliran io.

See all articles