


Was ist die IO-Hilfsklasse? Beispieleinführung der IO-Hilfeklasse (mit Code)
Der Inhalt dieses Artikels besteht darin, vorzustellen, was die IO-Hilfeklasse ist. Beispielhafte Einführung einer IO-Hilfsklasse (mit Code). Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.
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 } }
Das obige ist der detaillierte Inhalt vonWas ist die IO-Hilfsklasse? Beispieleinführung der IO-Hilfeklasse (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Während des Entwicklungsprozesses mit Golang stoßen wir häufig auf Fehler. Einer davon ist „undefiniert:io.ReadAll“. Dieser Fehler wird hauptsächlich durch die Verwendung veralteter Methoden verursacht. In diesem Artikel wird erläutert, wie Sie diesen Fehler beheben können. Schauen wir uns zunächst an, warum dieser Fehler auftritt. Vor golang1.15 gab es im io-Paket keine ReadAll-Methode. Wenn wir diese Methode verwenden, fordert der Compiler „undefiniert:io.Re“ auf

Linux io bezieht sich auf eine Dateioperation. Unter Linux besteht eine Datei aus einer Reihe von Binärströmen. Während des Informationsaustauschs führen wir alle Datensende- und -empfangsvorgänge für diese Ströme aus. Diese Vorgänge werden als E/A-Vorgänge bezeichnet. Da Linux einen virtuellen Speichermechanismus verwendet, muss der Kernel über Systemaufrufe angefordert werden, um E/A-Vorgänge abzuschließen.

Bei der Entwicklung mit Golang stoßen wir häufig auf verschiedene Probleme und Fehlermeldungen. Eines der häufigsten Probleme ist der Fehler „undefiniert:io.TeeReader“. Dieser Fehler tritt normalerweise beim Kompilieren des Programms auf und kann manchmal frustrierend sein. In diesem Artikel erfahren Sie, wie Sie dieses Problem lösen, damit Sie die Golang-Entwicklungsarbeit reibungslos durchführen können. Schauen wir uns zunächst an, was genau dieser Fehler bedeutet. wenn wir es verwenden

Concept fio, auch bekannt als FlexibleIOTester, ist eine von JensAxboe geschriebene Anwendung. Jens ist der Betreuer von blockIOsubsystem im LinuxKernel. FIO ist ein Tool zum Testen der Netzwerkdateisystem- und Festplattenleistung. Es wird häufig zur Überprüfung von Maschinenmodellen und zum Vergleich der Dateisystemleistung verwendet. Es sendet automatisch FIO-Befehle an eine Liste von Clustermaschinen und sammelt IOPS für kleine Dateien und Durchsatzdaten für große Dateien. rw=[mode]rwmixwrite=30 Im gemischten Lese- und Schreibmodus macht das Schreiben 30 % aus

Verwenden Sie die Funktion io/ioutil.WriteFile, um eine Zeichenfolge in eine Datei zu schreiben und die Dateiberechtigungen und das Einrückungsformat festzulegen. In der Go-Sprache können Sie mithilfe der Funktion WriteFile im Paket io/ioutil problemlos eine Zeichenfolge in eine Datei schreiben. Gleichzeitig können wir auch Dateiberechtigungen und Einrückungsformate festlegen, um unterschiedliche Anforderungen zu erfüllen. Hier ist ein Beispielcode, der zeigt, wie Sie mit der WriteFile-Funktion in eine Datei schreiben und Berechtigungen und Einrückungsformat festlegen: packagemainim

1. Einige grundlegende vorbereitende Kenntnisse über NIO und NIO im System der IO-Stream-Klasse in Java: https://blog.csdn.net/ZGL_cyy/article/details/104326458 Fragen zum JavaIO-System und zum NIO- und BIO-System. https://blog.csdn.net/ZGL_cyy/article/details/122836368Warum NIO verwenden: Da die herkömmliche IO-Dateiübertragungsrate niedrig ist, wird NIO für Datei-Download-Vorgänge ausgewählt. Ein weiterer Vorteil von NIO besteht darin, dass durch Nullkopien die Duplizierung von Daten im Speicher und die Auswirkungen von CPU-Operationen verringert werden können. Ort

Bei der Java-Programmierung ist es häufig erforderlich, E/A-Operationen an Dateien durchzuführen. Datei-E/A-Vorgänge umfassen Vorgänge wie das Lesen und Schreiben von Dateien, das Erstellen von Verzeichnissen und das Löschen von Dateien. In diesem Artikel werden einige gängige Datei-E/A-Betriebstechniken und deren Verwendung in Java-Programmen vorgestellt. 1. Dateipfad Um Dateien und Verzeichnisse in Java zu betreiben, müssen Sie den Dateipfad angeben. Dateipfade können in absolute Pfade und relative Pfade unterteilt werden. Ein absoluter Pfad ist der vollständige Pfad zur Datei im Dateisystem, beginnend mit dem Stammverzeichnis. Ein relativer Pfad ist der Pfad zu einer Datei relativ zum aktuellen Arbeitsverzeichnis. Jav

Das Konzept des E/A-Streams kann zunächst als die Übertragung von Daten in: 1234567 verstanden werden und diese von der Hallo-Datei in die Haha-Datei übertragen Das heißt, es handelt sich um eine Byte-für-Byte-Übertragung. Dies ist der allgemeine Prozess, bei dem der IO-Stream jedes Byte lesen kann Art der Datei. Zum Beispiel: Textdateien, Bilder, MP3-Songs, Videos usw. Da der IO-Stream Byte für Byte gelesen wird, müssen wir die Byte-Einzelbyte-Variable verwenden, um die Länge zu erhalten. Wenn Sie zu viel Inhalt erhalten, müssen Sie das entsprechende Array verwenden. Die dem IO-Stream entsprechende Methode muss in allen IO-Stream-Methoden geschrieben werden.
