Convert-it/Areas/ImageConverters/Controllers/JpgToWebpController.cs
2025-09-10 01:06:53 -03:00

78 lines
2.9 KiB
C#

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<SharedResource> _localizer;
public JpgToWebpController(IStringLocalizer<SharedResource> 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<IActionResult> 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");
}
}
}
}