public void Case2() { var builder = new WebPEncoderBuilder(); var encoder = builder .CopyMetadata(Metadatas.EXIF, Metadatas.ICC) .Resize(100, 100) .AlphaConfig(x => x .TransparentProcess( TransparentProcesses.Blend, Color.Yellow ) ) .CompressionConfig(x => x.Lossless(y => y.Quality(75))) .Build(); if (!Directory.Exists("Output")) { Directory.CreateDirectory("Output"); } using (var outputFile = File.Open("Output/openCC-Yellow.webp", FileMode.Create)) using (var inputFile = File.Open("Samples/openCC.png", FileMode.Open)) { encoder.Encode(inputFile, outputFile); } }
public void Case1() { var builder = new WebPEncoderBuilder(); var encoder = builder .Crop(10, 10, 20, 20) .CopyMetadata(Metadatas.EXIF, Metadatas.ICC) .LowMemory() .MultiThread() .Resize(200, 200) .AlphaConfig(x => x .TransparentProcess( TransparentProcesses.Blend, Color.Black ) ) .CompressionConfig(x => x.NearLossless(80, c => c.Size(1024 * 4))) .Build(); var output = new MemoryStream(); using (var inputFile = File.Open("Samples/kaohsiung.jpg", FileMode.Open)) { encoder.Encode(inputFile, output); } Assert.NotEqual(0, output.Length); }
public void Case4() { var builder = new WebPEncoderBuilder(); var encoder = builder .Resize(100, 100) .Resize(50, 0) .Build(); if (!Directory.Exists("Output")) { Directory.CreateDirectory("Output"); } using (var outputFile = File.Open("Output/openCC-ResetResize.webp", FileMode.Create)) using (var inputFile = File.Open("Samples/openCC.png", FileMode.Open)) { encoder.Encode(inputFile, outputFile); } }
public void Case3() { var builder = new WebPEncoderBuilder(); var encoder = builder .Resize(100, 100) .AlphaConfig(x => x .TransparentProcess( TransparentProcesses.Exact ) ) .CompressionConfig(x => x.NearLossless(80, y => y.Size(1500))) .Build(); if (!Directory.Exists("Output")) { Directory.CreateDirectory("Output"); } using (var outputFile = File.Open("Output/openCC-Exact.webp", FileMode.Create)) using (var inputFile = File.Open("Samples/openCC.png", FileMode.Open)) { encoder.Encode(inputFile, outputFile); } }
public void Compress(IServiceProvider serviceProvider, string srcFile, string dstFile) { var loggerFactory = (ILoggerFactory)serviceProvider.GetService(typeof(ILoggerFactory)); var logger = loggerFactory.CreateLogger("ImageToWebp"); string tempfile = null; var path = Path.Combine(Path.GetFullPath("."), "webp"); //根据当前系统平台下载google压缩工具 if (Directory.Exists(path) == false) { logger.LogInformation("begin WebPExecuteDownloader.Download"); WebPExecuteDownloader.Download(); logger.LogInformation("end WebPExecuteDownloader.Download"); } var builder = new WebPEncoderBuilder(); var encoder = builder .AlphaConfig(x => x // 透明处理 .TransparentProcess( TransparentProcesses.Exact ) ) .Build(); var ext = Path.GetExtension(srcFile); if (string.Equals(ext, ".gif", StringComparison.CurrentCultureIgnoreCase)) { //gif需要更改工具名称 var type = encoder.GetType(); var fieldInfo = type.GetField("_executeFilePath", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); var _executeFilePath = (string)fieldInfo.GetValue(encoder).ToString().Replace("cwebp", "gif2webp"); fieldInfo.SetValue(encoder, _executeFilePath); fieldInfo = type.GetField("_arguments", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); fieldInfo.SetValue(encoder, "-q 70"); } while (true) { try { logger.LogInformation("build webp for " + dstFile); using (var outputFile = File.Open(dstFile, FileMode.Create)) using (var inputFile = File.Open(srcFile, FileMode.Open)) { encoder.Encode(inputFile, outputFile); } if (tempfile != null) { try { File.Delete(tempfile); } catch { } } break; } catch (Exception ex) { logger.LogError(ex.ToString()); if (tempfile != null) { try { File.Delete(tempfile); } catch { } tempfile = null; } if (ex.Message.Contains("16383")) { //图像太大,把分辨率转小 using (var bitmap = Bitmap.FromFile(srcFile)) { int newwidth = bitmap.Size.Width; int newheight = bitmap.Size.Height; if (newwidth > 16383) { newheight = (int)(newheight * (16383.0 / newwidth)); newwidth = 16383; } if (newheight > 16383) { newwidth = (int)(newwidth * (16383.0 / newheight)); newheight = 16383; } using (var newbitmap = new Bitmap(newwidth, newheight, bitmap.PixelFormat)) { using (Graphics g = Graphics.FromImage(newbitmap)) { g.DrawImage(bitmap, new Rectangle(0, 0, newwidth, newheight), new Rectangle(Point.Empty, bitmap.Size), GraphicsUnit.Pixel); } var rawformat = bitmap.RawFormat; bitmap.Dispose(); tempfile = dstFile + ".tmp.png"; while (System.IO.File.Exists(tempfile)) { tempfile = dstFile + DateTime.Now.ToString("yyyyMMddHHmmss") + ".tmp.png"; } srcFile = tempfile; newbitmap.Save(tempfile, rawformat); } } } else { break; } } } }