Zapisywanie zdjęć ze Schowka do pliku w C#

jedną z motywacji do przeniesienia mojego bloga do Markdown było zaprzestanie polegania na Windows Live Writer, który nie jest już obsługiwany i ma wiele błędów. Ale jedną rzeczą, która była wygodna, było wklejanie obrazów do postów. Mogę po prostu użyć narzędzia przycinania systemu Windows i wkleić obraz bezpośrednio do posta. W Markdown muszę zapisać obraz do pliku i wygenerować znaczniki odnoszące się do tego pliku.

w przypadku małych zautomatyzowanych zadań, takich jak to, moim narzędziem goto jest niesamowity LINQPad. Mam tam setki skryptów do robienia wszelkiego rodzaju przydatnych rzeczy.

generowanie nazwy pliku

przede wszystkim mój skrypt musi ustalić, gdzie zapisać obraz w schowku. Zależy to od tego, na jakim komputerze jestem uruchomiony, ponieważ moje repozytorium GitHub jest klonowane do różnych ścieżek. Oto szybka i brudna sztuczka LINQ, aby wybrać odpowiedni folder, niezależnie od komputera, na którym jestem:

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

następnie muszę wygenerować nazwę pliku. Używam „ślimaka” postu jako przedrostka, plus rosnąca liczba. Ponownie, używam szybkiego bitu LINQ, aby znaleźć pierwszy przyrostek, który nie został użyty.

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));

Zapisywanie obrazów ze schowka

teraz wiemy, gdzie chcemy zapisać obraz, możemy użyć klasy System.Windows.Forms.Clipboard, aby uzyskać dostęp do obrazu i zapisać go w pliku PNG. Nie zniechęcaj się „Windows Forms” w nazwie – ta klasa jest najprostszym sposobem na dostęp do schowka i może być używana z konsoli lub aplikacji WPF, jeśli chcesz.

aktualizuję również zawartość schowka znacznikiem, który chcę wkleić do mojego posta na blogu. Teraz wszystko, co muszę zrobić po użyciu narzędzia klip systemu Windows, aby zrobić zrzut ekranu, to uruchomić ten skrypt, a następnie wkleić znacznik w moim edytorze tekstu.

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

więc mam wklejanie obrazu do moich postów markdown prawie tak proste, jak to było z Windows Live Writer, ale następnym krokiem byłoby włączenie podobnego procesu do kodu Visual Studio, którego używam jako mojego edytora. Myślę, że można to przekształcić w rozszerzenie kodu Visual Studio, ale podejrzewam, że oznacza to przepisanie w węźle.js i nauka jak działają rozszerzenia VS Code. Jeśli uda mi się to napiszę o tym, jak to zrobiłem.

ale mam nadzieję, że jest to przydatne dla każdego, kto potrzebuje dostępu do schowka w C#, a także daje kilka pomysłów na to, jak skrypty LINQPad mogą być używane do automatyzacji zadań ręcznych.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.