public new IFileInfo GetFileInfo(string subpath) { var fileInfo = base.GetFileInfo(subpath); if (fileInfo.Exists) { return(fileInfo); } var matchResult = _options.IsMatch(subpath, _options.PathMatch); if (!matchResult.Result) { return(fileInfo); } var imageHandleDto = matchResult.Data; //生成文件 fileInfo = base.GetFileInfo($"{imageHandleDto.ImagePath}{imageHandleDto.ImageName}.{imageHandleDto.ImageExtensions}"); if (!fileInfo.Exists) { return(fileInfo); } var newImagePath = Path.Join(Root.Replace("\\", "/"), subpath).Replace("//", "/"); //_stopwatch.Start(); //var settings = new ProcessImageSettings() //{ // Width = imageHandleDto.ImageWidth, // Height = imageHandleDto.ImageHeight, // ResizeMode = CropScaleMode.Max, // SaveFormat = FileFormat.Jpeg, // JpegQuality = 75, // JpegSubsampleMode = ChromaSubsampleMode.Subsample420 //}; //using (var output = new FileStream(newImagePath, FileMode.Create)) //{ // MagicImageProcessor.ProcessImage(fileInfo.PhysicalPath, output, settings); //} //_stopwatch.Stop(); //_logger.LogDebug($"Magick.NET耗时{_stopwatch.ElapsedMilliseconds}ms"); //File.Delete(newImagePath); //_stopwatch.Restart(); //using (var original = FreeImageBitmap.FromFile(fileInfo.PhysicalPath)) //{ // using (var resized = new FreeImageBitmap(original, imageHandleDto.ImageWidth, imageHandleDto.ImageHeight)) // { // resized.Save(newImagePath, FREE_IMAGE_FORMAT.FIF_JPEG, // FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYGOOD | // FREE_IMAGE_SAVE_FLAGS.JPEG_BASELINE); // } //} //_stopwatch.Stop(); //_logger.LogDebug($"FreeImage FromFilePath耗时{_stopwatch.ElapsedMilliseconds}ms"); //File.Delete(newImagePath); //_stopwatch.Restart(); //using (var original = FreeImageBitmap.FromStream(fileInfo.CreateReadStream())) //{ // using (var resized = new FreeImageBitmap(original, imageHandleDto.ImageWidth, imageHandleDto.ImageHeight)) // { // resized.Save(newImagePath, FREE_IMAGE_FORMAT.FIF_JPEG, // FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYGOOD | // FREE_IMAGE_SAVE_FLAGS.JPEG_BASELINE); // } //} //_stopwatch.Stop(); //_logger.LogDebug($"FreeImage FromFileStream耗时{_stopwatch.ElapsedMilliseconds}ms"); _stopwatch.Start(); FREE_IMAGE_FORMAT imageFormat = 0; switch (imageHandleDto.ImageExtensions.ToLower()) { case "jpg": case "jpeg": imageFormat = FREE_IMAGE_FORMAT.FIF_JPEG; break; case "png": imageFormat = FREE_IMAGE_FORMAT.FIF_PNG; break; case "gif": imageFormat = FREE_IMAGE_FORMAT.FIF_GIF; break; case "ico": imageFormat = FREE_IMAGE_FORMAT.FIF_ICO; break; default: imageFormat = FREE_IMAGE_FORMAT.FIF_UNKNOWN; break; } using (var original = FreeImageBitmap.FromFile(fileInfo.PhysicalPath)) { int x = 0; int y = 0; int width = original.Width; int height = original.Height; if ((double)original.Width / (double)original.Height > (double)imageHandleDto.ImageWidth / (double)imageHandleDto.ImageHeight) { height = original.Height; width = original.Height * imageHandleDto.ImageWidth / imageHandleDto.ImageHeight; y = 0; x = (original.Width - width) / 2; } else { width = original.Width; height = original.Width * imageHandleDto.ImageHeight / imageHandleDto.ImageWidth; x = 0; y = (original.Height - height) / 2; } int left = x, top = y + height, right = x + width, bottom = y; using (var crop = original.Copy(left, top, right, bottom)) { using (var resized = crop.GetScaledInstance(imageHandleDto.ImageWidth, imageHandleDto.ImageHeight, FREE_IMAGE_FILTER.FILTER_BICUBIC)) { //, FREE_IMAGE_FORMAT.FIF_JPEG, FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYGOOD | FREE_IMAGE_SAVE_FLAGS.JPEG_BASELINE resized.Save(newImagePath, imageFormat, FREE_IMAGE_SAVE_FLAGS.DEFAULT); } } } _stopwatch.Stop(); _logger.LogDebug($"FreeImage FromFilePath耗时{_stopwatch.ElapsedMilliseconds}ms"); fileInfo = base.GetFileInfo(subpath); return(fileInfo); }
public new IFileInfo GetFileInfo(string subpath) { var fileInfo = base.GetFileInfo(subpath); if (fileInfo.Exists) { return(fileInfo); } var matchResult = _options.IsMatch(subpath, _options.PathMatch); if (!matchResult.Result) { return(fileInfo); } var imageHandleDto = matchResult.Data; //生成文件 fileInfo = base.GetFileInfo($"{imageHandleDto.ImagePath}{imageHandleDto.ImageName}.{imageHandleDto.ImageExtensions}"); if (!fileInfo.Exists) { return(fileInfo); } var newImagePath = Path.Join(Root.Replace("\\", "/"), subpath).Replace("//", "/"); //_stopwatch.Start(); //var settings = new ProcessImageSettings() //{ // Width = imageHandleDto.ImageWidth, // Height = imageHandleDto.ImageHeight, // ResizeMode = CropScaleMode.Max, // SaveFormat = FileFormat.Jpeg, // JpegQuality = 75, // JpegSubsampleMode = ChromaSubsampleMode.Subsample420 //}; //using (var output = new FileStream(newImagePath, FileMode.Create)) //{ // MagicImageProcessor.ProcessImage(fileInfo.PhysicalPath, output, settings); //} //_stopwatch.Stop(); //_logger.LogDebug($"Magick.NET耗时{_stopwatch.ElapsedMilliseconds}ms"); //File.Delete(newImagePath); //_stopwatch.Restart(); //using (var original = FreeImageBitmap.FromFile(fileInfo.PhysicalPath)) //{ // using (var resized = new FreeImageBitmap(original, imageHandleDto.ImageWidth, imageHandleDto.ImageHeight)) // { // resized.Save(newImagePath, FREE_IMAGE_FORMAT.FIF_JPEG, // FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYGOOD | // FREE_IMAGE_SAVE_FLAGS.JPEG_BASELINE); // } //} //_stopwatch.Stop(); //_logger.LogDebug($"FreeImage FromFilePath耗时{_stopwatch.ElapsedMilliseconds}ms"); //File.Delete(newImagePath); //_stopwatch.Restart(); //using (var original = FreeImageBitmap.FromStream(fileInfo.CreateReadStream())) //{ // using (var resized = new FreeImageBitmap(original, imageHandleDto.ImageWidth, imageHandleDto.ImageHeight)) // { // resized.Save(newImagePath, FREE_IMAGE_FORMAT.FIF_JPEG, // FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYGOOD | // FREE_IMAGE_SAVE_FLAGS.JPEG_BASELINE); // } //} //_stopwatch.Stop(); //_logger.LogDebug($"FreeImage FromFileStream耗时{_stopwatch.ElapsedMilliseconds}ms"); _stopwatch.Start(); FREE_IMAGE_FORMAT imageFormat = 0; switch (imageHandleDto.ImageExtensions.ToLower()) { case "jpg": case "jpeg": imageFormat = FREE_IMAGE_FORMAT.FIF_JPEG; break; case "png": imageFormat = FREE_IMAGE_FORMAT.FIF_PNG; break; case "gif": imageFormat = FREE_IMAGE_FORMAT.FIF_GIF; break; case "ico": imageFormat = FREE_IMAGE_FORMAT.FIF_ICO; break; default: imageFormat = FREE_IMAGE_FORMAT.FIF_UNKNOWN; break; } using (var original = FreeImageBitmap.FromFile(fileInfo.PhysicalPath)) { var size = original.Width / (double)imageHandleDto.ImageWidth; if ((imageHandleDto.ImageHeight * size) > original.Height) { size = original.Height / (double)imageHandleDto.ImageHeight; } var width = original.Width / size; var height = original.Height / size; width = width > original.Width ? original.Width : width; height = height > original.Height ? original.Height : height; using (var resized = original.GetScaledInstance((int)width, (int)height, FREE_IMAGE_FILTER.FILTER_BICUBIC)) { double left, top, right, bottom; var halfWidth = Math.Floor(Convert.ToDouble(imageHandleDto.ImageWidth / 2)); var halfHeight = Math.Floor(Convert.ToDouble(imageHandleDto.ImageHeight / 2)); var centerX = Math.Round(width / 2); var centerY = Math.Round(height / 2); if (resized.Width > imageHandleDto.ImageWidth) { left = centerX - halfWidth; right = centerX + halfWidth; } else { left = 0; right = resized.Width; } if (resized.Height > imageHandleDto.ImageHeight) { bottom = centerY - halfHeight; top = centerY + halfHeight; } else { bottom = 0; top = resized.Height; } using (var crop = resized.Copy((int)left, (int)top, (int)right, (int)bottom)) { //, FREE_IMAGE_FORMAT.FIF_JPEG, FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYGOOD | FREE_IMAGE_SAVE_FLAGS.JPEG_BASELINE crop.Save(newImagePath, imageFormat, FREE_IMAGE_SAVE_FLAGS.DEFAULT); } } } _stopwatch.Stop(); _logger.LogDebug($"FreeImage FromFilePath耗时{_stopwatch.ElapsedMilliseconds}ms"); fileInfo = base.GetFileInfo(subpath); return(fileInfo); }