Pracuję nad projektem ASP.NET Core, jedną z głównych funkcji, które muszę wypracować, jest umożliwienie użytkownikom przesyłania obrazu, który jest automatycznie przeskalowywany i konwertowany na „jpg”. Oznacza to, że użytkownik może przesłać obraz w dowolnym rozmiarze i formacie, a jego rozmiar zostanie automatycznie zmieniony na 250px szerokości przy zachowaniu proporcji.
W przeszłości używałem 'ImageResizer' w moich aplikacjach MVC, ale przeczytałem, że nie jest kompatybilny z .NET Core. Dalsze poszukiwania ujawniły, że „ImageSharp" jest dostępny z SixLabors.
Zacząłem z nim pracować, ale staram się nadać temu sens mojej aplikacji. Mam prosty formularz z okienkiem do przesyłania plików. Po przesłaniu formularza wszystkie dane są przekazywane do metody Create
poniżej. Po utworzeniu rekordu identyfikator jest następnie pobierany w celu wypełnienia obrazu we właściwej lokalizacji na platformie Azure. Ta część działa dobrze, część, z którą potrzebuję pomocy, to przetwarzanie obrazu w sposób, o którym wspomniałem powyżej.
Co muszę osiągnąć
- Zmień rozmiar obrazu na szerokość 250 pikseli
- Zachowaj proporcje
- Konwertuj na JPG
- Przejdź do platformy Azure w celu zapisania.
Metoda mojego kontrolera
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Car car)
{
if (ModelState.IsValid)
{
//Create the record
_carService.InsertCar(car);
//Grab the newly created record ID
int id = car.Id;
if (car.File !=null)
{
//Perpare a category for the structure
string artifact = "car";
//Get file name, mime type and data structure
var fileName = Path.GetFileName(car.File.FileName);
string mimeType = car.File.ContentType;
byte[] fileData = new byte[car.File.Length];
//For saving to memorystream, ImageSharp
var outStream = new MemoryStream();
//Process Image
using (Image<Rgba32> image = Image.Load(fileData))
{
//Not sure how to process at this stage.
}
//Create instance of the blob storage service
BlobStorageService objBlobService = new BlobStorageService();
//Prepare upload path and pass arguemnts to the service.
car.ImagePath = objBlobService.UploadFileToBlob(car.File.FileName, fileData, mimeType, id, artifact);
}
//Redirect to index
return RedirectToAction(nameof(Index));
}
else
{
return View(vessel);
}
}
Czy ktoś może pomóc w prawidłowym przetworzeniu obrazu?
1 odpowiedź
Wystarczy użyć zawartości outStream i metody UploadStream z pakietu nuget Microsoft.Azure.Storage.Blob:
CloudBlobClient blobClient = GetBlobClient(storageAccountName);
var container = blobClient.GetContainerReference(containerName);
var blob = container.GetBlockBlobReference("sample.png");
blob.UploadFromStream(outStream);
Podobne pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.