Speichern von Bildern aus der Zwischenablage in einer Datei in C#

Eine der Motivationen, meinen Blog auf Markdown umzustellen, war, sich nicht mehr auf Windows Live Writer zu verlassen, das nicht mehr unterstützt wird und eine Reihe von Fehlern aufweist. Aber eine Sache, für die es praktisch war, war das Einfügen von Bildern in Beiträge. Ich könnte einfach das Windows-Clipping-Tool verwenden und das Bild direkt in einen Beitrag einfügen. In Markdown muss ich das Bild in einer Datei speichern und ein Markup generieren, um auf diese Datei zu verweisen.

Für kleine automatisierte Aufgaben wie diese ist mein Goto-Tool das erstaunliche LINQPad. Ich habe Hunderte von Skripten, um alle möglichen nützlichen Dinge zu tun.

Generieren eines Dateinamens

Zunächst muss mein Skript herausfinden, wo das Bild in der Zwischenablage gespeichert werden soll. Dies hängt davon ab, auf welchem Computer ich laufe, da mein GitHub-Repository auf verschiedene Pfade geklont wird. Hier ist ein schneller und schmutziger LINQ-Trick, um den richtigen Ordner auszuwählen, egal auf welchem Computer ich mich befinde:

var path = new { @"C:\Users\markh\code\web\markblog\wwwroot\posts18",@"C:\code\soundcode\MarkBlog\wwwroot\posts18" }.First(p => Directory.Exists(p));

Als nächstes muss ich einen Dateinamen generieren. Ich verwende den „Slug“ des Beitrags als Präfix plus eine inkrementierende Zahl. Auch hier verwende ich ein kurzes Stück LINQ, um das erste Suffix zu finden, das nicht verwendet wurde.

var prefix = "css-social-media-icon-list";var fileName = Enumerable.Range(1,100) .Select(n => Path.Combine(path,$"{prefix}-{n}.png")) .First(p => !File.Exists(p));

Speichern von Bildern aus der Zwischenablage

Jetzt wissen wir, wo wir das Bild speichern möchten, können wir die System.Windows.Forms.Clipboard -Klasse verwenden, um auf das Bild zuzugreifen und es in einer PNG-Datei zu speichern. Lassen Sie sich nicht von „Windows Forms“ im Namen abschrecken – diese Klasse ist der einfachste Weg, um auf die Zwischenablage zuzugreifen und kann von einer Konsole oder WPF-App aus verwendet werden, wenn Sie möchten.

Ich aktualisiere auch den Inhalt der Zwischenablage mit dem Markdown, den ich in meinen Blogbeitrag einfügen möchte. Alles, was ich jetzt tun muss, nachdem ich das Windows-Clip-Tool zum Erstellen eines Screenshots verwendet habe, ist, dieses Skript auszuführen und dann den Markdown in meinen Texteditor einzufügen.

if(Clipboard.ContainsImage()){ Clipboard.GetImage().Save(fileName, ImageFormat.Png); Clipboard.SetText($"!(/posts/2018/{Path.GetFileName(fileName)})");}

Weitermachen?

Ich habe also das Einfügen eines Bildes in meine Markdown-Posts fast so einfach wie mit Windows Live Writer, aber der nächste Schritt wäre, einen ähnlichen Prozess in Visual Studio Code zu integrieren, den ich als Editor verwende. Ich denke, dies könnte in eine Visual Studio-Code-Erweiterung umgewandelt werden, aber ich vermute, dass dies ein Umschreiben in node bedeutet.js und lernen, wie VS-Code-Erweiterungen funktionieren. Wenn ich es schaffe, werde ich darüber schreiben, wie ich es gemacht habe.

Aber hoffentlich ist dies nützlich für alle, die den Zugriff auf die Zwischenablage in C # benötigen, und gibt Ihnen auch einige Ideen, wie LINQPad-Skripte verwendet werden können, um manuelle Aufgaben zu automatisieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.