Wstęp

Czasem bywa tak, że potrzebujemy skonwertować plik SVG do jakiegoś innego formatu graficznego (chociażby PNG). Niestety .NET nie daje tego w standardzie.

Co to SVG – dla zainteresowanych

SVG to Scalable Vector Graphics. Po ludzku jest to wolny format grafiki WEKTOROWEJ. Wolny w tym znaczeniu, że nie leżą na nim żadne licencje. Grafika wektorowa to po prostu zapis elementów z jakich składa się rysunek. Czym to się różni od grafiki rastrowej?

Weźmy najprostszy przykład – BMP. Tutaj każdy piksel jest zapisany osobno. Każdy piksel ma swój kolor. Minusem takiego rozwiązania jest to, że takiej grafiki nie możemy powiększać (skalować). W pewnym momencie po prostu zrobi się „pikseloza”.

Oczywiście są pewne sposoby, żeby sobie z tym poradzić. Od aproksymacji po sztuczną inteligencję (która całkiem dobrze sobie z tym radzi).

Natomiast jeśli chodzi o format SVG (wektorowy), to nie zapisujemy w nim wartości poszczególnych pikseli, tylko pełne obiekty. Np. „linia” lub „okrąg”. Obiekty są zapisane w sposób wektorowy, dzięki czemu teoretycznie możemy takie grafiki skalować w nieskończoność.

Konwersja SVG do innych formatów

Tak jak już mówiłem, .NET nie ma tego w standardzie. Istnieją jednak różne biblioteki do takiej konwersji, jednak wszystkie one są płatne. No i tu wchodzi SeViGo.

SeViGo to DARMOWE narzędzie mojego autorstwa, które konwertuje podane pliki SVG do wybranych formatów graficznych.

Jak korzystać z SeViGo?

Jeśli potrzebujesz skonwertować po prostu jeden, czy dwa pliki ad hoc, wejdź na stronę https://sevigo.eu i użyj tam wbudowanego konwertera.

Jednak fajniejszą opcją jest możliwość użycia konwertera w Twoim kodzie. W jaki sposób? SeViGo udostępnia API do konwersji. Jedyne, co musisz zrobić to:

  1. Zarejestrować swojego klienta API na: https://sevigo.eu/Api

Jak widzisz, wystarczy że podasz swój adres e-mail i jakąś nazwę. Może to być nazwa Twojej firmy, chociaż dużo bardziej polecam podać tam coś, co jednoznacznie określi Twój produkt. Np. nazwę Twojego projektu.

Po rejestracji dostajesz klucz do API i możesz działać.

  1. Po rejestracji pobierz NuGeta, którego przygotowałem: dotnet add package nerdolando-svg-api-client --version 1.0.2
  2. Dodaj do konfiguracji aplikacji info o otrzymanym po rejestracji kluczu:
"SevigoApiOptions": 
{ 
    "ApiKey": "<twój klucz>"
}
  1. Na koniec zarejestruj serwisy potrzebne do obsługi SeViGo:
services.AddSevigo(Configuration.GetSection("SevigoApiOptions");

A samo użycie biblioteki jest banalne. Wystarczy, że dodasz MainApiClient w konstruktorze swojego serwisu. Odpowiedni obiekt zostanie wstrzyknięty przez dependency injection. Następnie wystarczy, że wywołasz metodę ConvertSvg:

public MyService(MainApiClient sevigoApiClient)
{
	_sevigoApiClient = sevigoApiClient;
}

public async Task ConvertSvg(string svgContent)
{
	var request = new ConvertFileRequest();
	request.SvgContent = svgContent;
	request.ExportType = ExportType.PNG; //lub inny typ
	
	var response = await _apiClient.ConvertSvg(request);
}

SvgContent to oczywiście zawartość Twojego pliku SVG. Pamiętaj, że SVG jest plikiem tekstowym, więc możesz go odczytać przez zwykłe File.ReadAllText i tą zawartość tutaj przekazać.

W odpowiedzi dostaniesz informacje, czy konwersja się powiodła, a także link do skonwertowanego pliku, który możesz pobrać. Tylko uwaga! Plik zostaje usunięty z serwera po 7 dniach.

UWAGA

SeViGo jest hostowane na Azure Container Apps, które (żeby ograniczyć koszty) skaluje się do zera. To oznacza, że aplikacja może nie być uruchomiona w jakimś czasie. I pierwszy strzał do niej może się nie powieść. Aby mieć pewność, że aplikacja będzie odpowiednio „wybudzona”, możesz wykonać strzał na końcówkę health:

await _apiClient.CallHealthCheck();

Czy to jest za darmo?

Tak, SeViGo na ten moment jest zupełnie za darmo. Jeśli jednak zainteresowanie będzie odpowiednio wysokie, wtedy mogą pojawić się jakieś ograniczenia. Ale spokojnie, jeśli coś miało by się zmienić, wszyscy zostaną o tym powiadomieni 🙂


To tyle, daj znać w komentarzu, czy używasz, czy Ci się podoba i co być potrzebował więcej.

Obrazek wyróżniający: Obraz autorstwa Freepik

Podziel się artykułem na: