using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Localization; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Webp; namespace Convert_It_Online.Areas.ImageConverters.Controllers { [Area("ImageConverters")] public class JpgToWebpController : Controller { private readonly IStringLocalizer _localizer; public JpgToWebpController(IStringLocalizer localizer) { _localizer = localizer; } private void SetCommonViewBagProperties() { ViewBag.HomeLink = _localizer["HomeLink"]; ViewBag.TextMenuTitle = _localizer["TextMenuTitle"]; ViewBag.ImageMenuTitle = _localizer["ImageMenuTitle"]; ViewBag.CaseConverterTitle = _localizer["CaseConverterTitle"]; ViewBag.JpgToWebpTitle = _localizer["JpgToWebpTitle"]; ViewBag.FooterText = _localizer["FooterText"]; ViewBag.About = _localizer["About"]; ViewBag.Contact = _localizer["Contact"]; ViewBag.Terms = _localizer["Terms"]; } public IActionResult Index() { SetCommonViewBagProperties(); ViewBag.PageTitle = _localizer["ImageConverterPageTitle"]; ViewBag.PageDescription = _localizer["ImageConverterPageDescription"]; ViewBag.FileInputLabel = _localizer["FileInputLabel"]; ViewBag.ConvertButton = _localizer["ConvertButton"]; return View(); } [HttpPost] public async Task Convert(IFormFile jpgFile) { if (jpgFile == null || jpgFile.Length == 0) { ModelState.AddModelError("jpgFile", "Por favor, selecione um arquivo."); return View("Index"); } // Validação simples do tipo de arquivo if (jpgFile.ContentType != "image/jpeg") { ModelState.AddModelError("jpgFile", "Arquivo inválido. Por favor, envie um arquivo JPG."); return View("Index"); } try { using var imageStream = jpgFile.OpenReadStream(); using var image = await Image.LoadAsync(imageStream); using var memoryStream = new MemoryStream(); await image.SaveAsync(memoryStream, new WebpEncoder()); memoryStream.Position = 0; var fileName = Path.GetFileNameWithoutExtension(jpgFile.FileName) + ".webp"; return File(memoryStream.ToArray(), "image/webp", fileName); } catch (Exception) { // Log do erro (não implementado aqui) ModelState.AddModelError("jpgFile", "Ocorreu um erro ao processar a imagem."); return View("Index"); } } } }