Пример #1
0
        GetEncoder(SaveFormat saveFormat)
        {
            SixLabors.ImageSharp.Formats.IImageEncoder enc = null;
            switch (saveFormat)
            {
            case SaveFormat.Png:
                enc = new SixLabors.ImageSharp.Formats.Png.PngEncoder();
                break;

            case SaveFormat.Jpg:
                enc = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder();
                break;

            case SaveFormat.Gif:
                enc = new SixLabors.ImageSharp.Formats.Gif.GifEncoder();
                break;

            case SaveFormat.Bmp:
                enc = new SixLabors.ImageSharp.Formats.Bmp.BmpEncoder();
                break;

            default:
                enc = new SixLabors.ImageSharp.Formats.Png.PngEncoder();
                break;
            }

            return(enc);
        } // End Function GetEncoder
Пример #2
0
 public IImageEncoder ConvertEncoder()
 {
     SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder encoder = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder();
     if (_quality.HasValue)
     {
         encoder.Quality = _quality.Value;
     }
     return(encoder);
 }
Пример #3
0
        public static void fooo(string fileName, SaveFormat saveFormat)
        {
            //var imagePath = Microsoft.AspNetCore.Http.PathString.FromUriComponent("/" + url);
            //var fileInfo =  _fileProvider.GetFileInfo(imagePath);


            var fileInfo = new System.IO.FileInfo(fileName);
            //if (!fileInfo.Exists) { return NotFound(); }


            int width  = 100;
            int height = 100;

            byte[] data = null;


            using (MemoryStream outputStream = new MemoryStream())
            {
                using (System.IO.Stream inputStream = fileInfo.OpenRead())
                {
                    using (Image <Rgba32> image = Image.Load(inputStream))
                    {
                        image.Mutate(
                            delegate(IImageProcessingContext <Rgba32> mutant)
                        {
                            mutant.Resize(image.Width / 2, image.Height / 2);
                        }
                            );

                        IImageEncoder enc = null;

                        if (saveFormat == SaveFormat.Jpg)
                        {
                            enc = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder();
                        }
                        else if (saveFormat == SaveFormat.Png)
                        {
                            enc = new SixLabors.ImageSharp.Formats.Png.PngEncoder();
                        }
                        else if (saveFormat == SaveFormat.Png)
                        {
                            enc = new SixLabors.ImageSharp.Formats.Gif.GifEncoder();
                        }
                        else if (saveFormat == SaveFormat.Bmp)
                        {
                            enc = new SixLabors.ImageSharp.Formats.Bmp.BmpEncoder();
                        }

                        image.Save(outputStream, enc);
                    } // End Using image

                    data = outputStream.ToArray();
                } // End Using inputStream
            }     // End Using outputStream
        }         // End Sub fooo
Пример #4
0
        public IMAGEENCODER GetEncoder()
        {
            var encoder = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder
            {
                Quality = Quality
            };

            void act(SDK.ExportContext ctx, IMAGE32 img) => ctx.WriteStream(s => img.Save(s, encoder));

            return(act);
        }
Пример #5
0
        public Task ProcessAsync(BlobProcessHandlerContext context)
        {
            var configuration = context.ContainerConfiguration.GetImageResizeConfiguration();

            try
            {
                using (Image image = Image.Load(context.BlobStream))
                {
                    if (configuration.ImageSizeMustBeLargerThanPreset)
                    {
                        if (image.Width < configuration.ImageWidth || image.Height < configuration.ImageHeight)
                        {
                            throw new BusinessException(
                                      code: "Dignite.Abp.BlobStoring:010004",
                                      message: "Image size must be larger than Preset!",
                                      details: "Uploaded image must be larger than: " + configuration.ImageWidth + "x" + configuration.ImageHeight
                                      );
                        }
                    }


                    if (image.Width > configuration.ImageWidth || image.Height > configuration.ImageHeight)
                    {
                        image.Mutate(x =>
                        {
                            x.Resize(new ResizeOptions()
                            {
                                Mode = ResizeMode.Max,
                                Size = new Size(configuration.ImageWidth, configuration.ImageHeight)
                            });
                        });

                        var encoder = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder()
                        {
                            Quality = 40
                        };
                        context.BlobStream.Position = 0;
                        image.Save(context.BlobStream, encoder);
                        context.BlobStream.SetLength(context.BlobStream.Position);
                        context.BlobStream.Position = 0;
                    }
                }
            }
            catch (SixLabors.ImageSharp.InvalidImageContentException exception)
            {
            }
            return(Task.CompletedTask);
        }
Пример #6
0
        public static byte[] ResizeImage(string fileName, SaveFormat saveFormat)
        {
            byte[] data = null;


            using (MemoryStream outputStream = new MemoryStream())
            {
                using (Image <Rgba32> image = Image.Load(fileName))
                {
                    image.Mutate(
                        delegate(IImageProcessingContext <Rgba32> mutant)
                    {
                        mutant.Resize(image.Width / 22, image.Height / 22);
                    }
                        );

                    IImageEncoder enc = null;

                    if (saveFormat == SaveFormat.Jpg)
                    {
                        enc = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder();
                    }
                    else if (saveFormat == SaveFormat.Png)
                    {
                        enc = new SixLabors.ImageSharp.Formats.Png.PngEncoder();
                    }
                    else if (saveFormat == SaveFormat.GIF)
                    {
                        enc = new SixLabors.ImageSharp.Formats.Gif.GifEncoder();
                    }
                    else if (saveFormat == SaveFormat.Bmp)
                    {
                        enc = new SixLabors.ImageSharp.Formats.Bmp.BmpEncoder();
                    }

                    image.Save(@"D:\myfileformat." + saveFormat.ToString().ToLowerInvariant(), enc);

                    image.SaveAsJpeg(outputStream);
                } // End Using image

                data = outputStream.ToArray();
            } // End Using outputStream


            System.IO.File.WriteAllBytes(@"d:\myfile.jpg", data);

            return(data);
        } // End Sub ResizeImage
Пример #7
0
        public static async Task <string> CreateProfileImage(IUser user, Stream profilePicture)
        {
            var imageData = await GetProfileImageData(user, profilePicture);

            var encoder = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder();

            using var background = await Image.LoadAsync(imageData.BackgroundPath);

            background.Mutate(x => x.Resize(imageData.Size)
                              .DrawContainers(imageData.ImageContainers));


            await background.SaveAsync($"{_imagePath}{user.DiscordID}.jpg");

            return($"{_imagePath}{user.DiscordID}.jpg");
        }
Пример #8
0
        private void ResizeImage(Sticker sticker)
        {
            using (var image = SixLabors.ImageSharp.Image.Load(sticker.Blob))
            {
                var size   = 500f * 500f;
                var width  = Math.Sqrt(size * (image.Width / (float)image.Height));
                var height = size / width;

                image.Mutate(x => x.Resize((int)width, (int)height));
                using (var stream = new MemoryStream())
                {
                    var encoder = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder();
                    image.Save(stream, encoder);
                    sticker.Blob          = stream.ToArray();
                    sticker.BlobMediaType = "image/png";
                }
            }
        }
Пример #9
0
        public void Save(System.IO.Stream strm, System.Drawing.Imaging.ImageFormat format)
        {
            SixLabors.ImageSharp.Formats.IImageEncoder enc = null;

            if (format == System.Drawing.Imaging.ImageFormat.Jpeg)
            {
                enc = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder();
            }
            else if (format == System.Drawing.Imaging.ImageFormat.Png)
            {
                enc = new SixLabors.ImageSharp.Formats.Png.PngEncoder();
            }
            else if (format == System.Drawing.Imaging.ImageFormat.Gif)
            {
                enc = new SixLabors.ImageSharp.Formats.Gif.GifEncoder();
            }
            else if (format == System.Drawing.Imaging.ImageFormat.Bmp)
            {
                enc = new SixLabors.ImageSharp.Formats.Bmp.BmpEncoder();
            }

            this.m_image.Save(strm, enc);
        }
Пример #10
0
        private async Task ApplyAsync()
        {
            try
            {
                if (!string.IsNullOrEmpty(this.tb_ImageFile.Text) && File.Exists(this.tb_ImageFile.Text))
                {
                    //SixLabors.ImageSharp.Configuration config = new Configuration();

                    SixLabors.ImageSharp.Image image = await SixLabors.ImageSharp.Image.LoadAsync(this.tb_ImageFile.Text);

                    int width       = Convert.ToInt32(tb_Width.Text);
                    int height      = Convert.ToInt32(tb_Height.Text);
                    int sizepercent = Convert.ToInt32(tb_SizePercent.Text);

                    if (width != -1 && height != -1 && image.Width != width || image.Height != height)  //hard coded size
                    {
                        Log($"Resizing image from {image.Width},{image.Height} to {width},{height}...");
                        image.Mutate(img => img.Resize(width, height));
                    }
                    else if (sizepercent > 0 && sizepercent < 100)
                    {
                        double fractionalPercentage = (sizepercent / 100.0);
                        int    outputWidth          = (int)(image.Width * fractionalPercentage);
                        int    outputHeight         = (int)(image.Height * fractionalPercentage);

                        Log($"Resizing image to {sizepercent} from {image.Width},{image.Height} to {outputWidth},{outputHeight}...");
                        image.Mutate(img => img.Resize(outputWidth, outputHeight));
                    }

                    int quality = Convert.ToInt32(this.tb_jpegquality.Text);

                    MemoryStream stream = new System.IO.MemoryStream();

                    if (quality > 0 && quality < 100)
                    {
                        //string tfile = Path.Combine(Environment.GetEnvironmentVariable("TEMP"), "_AITOOL\tmpimage.jpg");

                        //Save the image using the specified jpeg compression
                        Log($"Compressing jpeg to {quality}% quality...");
                        SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder encoder = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder();
                        encoder.Quality = quality;
                        await image.SaveAsJpegAsync(stream, encoder);

                        image = await SixLabors.ImageSharp.Image.LoadAsync(stream);
                    }

                    int bright = Convert.ToInt32(tb_brightness.Text);

                    if (bright > 1)
                    {
                    }

                    // render onto an Image
                    //image.SaveAsBmp(stream);
                    System.Drawing.Image img = System.Drawing.Image.FromStream(stream);

                    // dispose the old image before displaying the new one
                    //pictureBox1.Image?.Dispose();
                    this.pictureBox1.BackgroundImage = img;
                }
                else
                {
                    MessageBox.Show("File does not exist.");
                }
            }
            catch (Exception ex)
            {
                Log("Error: " + Global.ExMsg(ex));
            }
        }
Пример #11
0
        //public unsafe void SendImage(Bitmap bitmap, int screenWidth, int screenHeight, int screenIndex, bool compress, int targetFPS)
        public void SendImage(BitmapXama bitmap, int screenWidth, int screenHeight, int screenIndex, bool compress, float targetFPS)
        {
            try
            {
                // get data length
                int dataLength, imageDataSize;
                imageDataSize = bitmap.Width * bitmap.Height * 3; //PixelFormat.Format24bprRgb

                dataLength = imageDataSize;


                //            // compress if needed
                if (GlobalConfiguration.isStreamRawH264Data)
                {
                    dataLength = bitmap.getInternalBuffer().Length;
                }
                else if (GlobalConfiguration.isConvJpeg)
                {
                    if (compressedStream == null)
                    {
                        compressedStream = new MemoryStream();
                    }
                    else
                    {
                        compressedStream.SetLength(0);
                    }

                    var tmpBitmapArr = bitmap.getInternalBuffer();
                    Array.Resize <Byte>(ref tmpBitmapArr, imageDataSize);
                    var img     = SixLabors.ImageSharp.Image.LoadPixelData <SixLabors.ImageSharp.PixelFormats.Bgr565>(tmpBitmapArr, bitmap.Width, bitmap.Height);
                    var encoder = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder();
                    encoder.Quality = GlobalConfiguration.jpegEncodeQuality; //default value is 75
                    img.Save(compressedStream, encoder);
                    compressedStream.Flush();
                    dataLength = (int)compressedStream.Length;
                }
                else if (compress)
                {
                    if (compressedStream == null)
                    {
                        compressedStream = new MemoryStream();
                    }
                    else
                    {
                        compressedStream.SetLength(0);
                    }

                    //using (var bitmapStream = new UnmanagedMemoryStream((byte*)locked.Scan0, dataLength))
                    var tmpBitmapArr = bitmap.getInternalBuffer();
                    Array.Resize <Byte>(ref tmpBitmapArr, imageDataSize);
                    var bitmapStream = new MemoryStream(tmpBitmapArr);

                    using (var gzip = new GZipStream(compressedStream, CompressionMode.Compress, true))
                    {
                        bitmapStream.CopyTo(gzip);
                    }

                    compressedStream.Flush();
                    dataLength = (int)compressedStream.Length;
                }

                // send meta data
                var metaData = new MetaData()
                {
                    type       = MetaDataTypes.ImageData,
                    compressed = compress,
                    dataSize   = dataLength,
                    //dataSize = -1, // for Debug
                    imageDataSize = imageDataSize,
                    width         = (short)bitmap.Width,
                    height        = (short)bitmap.Height,
                    screenWidth   = (short)screenWidth,
                    screenHeight  = (short)screenHeight,
                    //screenIndex = (short)screenIndex,
                    //format = bitmap.PixelFormat,
                    targetFPS = targetFPS
                                //mouseX = (short) frameNumber
                };
                frameNumber++;

                SendMetaDataInternal(metaData);

                if (compress || GlobalConfiguration.isConvJpeg)
                {
                    SendBinary(compressedStream.GetBuffer(), dataLength);
                }
                else
                {
                    // send bitmap data
                    SendBinary(bitmap.getInternalBuffer(), dataLength);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public async Task <ScanResultEquip> ParseResultWindowEquip(string fileName, ScanInfo scanInfo, AndroidConnector android)
        {
            ScanResultEquip exchangeInfo = new ScanResultEquip()
            {
                Found    = true,
                ScanInfo = scanInfo
            };

            using (var image = Image.Load <Rgba32>(fileName))
            {
                image.Clone(ctx => ctx.Crop(new Rectangle(996, 159, 549, 66))).Save($"itemname.png");
                string itemName = GetTextFromImage("itemname.png");
                if (itemName.ToLower() != scanInfo.RealName.ToLower())
                {
                    scanInfo.Message = $"Something is wrong, names do NOT match. Expected {scanInfo.RealName.ToLower()} but got {itemName.ToLower()}";
                    return(ScanResult.BuildError <ScanResultEquip>(scanInfo));
                }

                exchangeInfo.Price    = int.Parse(GetPriceEquip(image), CultureInfo.InvariantCulture);
                exchangeInfo.SnapTime = GetSnapTime(image);

                int i = 0;
                //scan for multiple items
                bool enchanted   = false;
                bool foundRefine = false;
                while (!Program.CancelScan)
                {
                    using (var image2 = Image.Load <Rgba32>(fileName))
                        image2.Clone(ctx => ctx.Crop(new Rectangle(383, 261, 553, 453))).Save($"enchant{i}.png");
                    string hasEnchant = GetTextFromImage($"enchant{i}.png");
                    Console.WriteLine($"- Text Read: \n\n{hasEnchant}\n\n");
                    if (hasEnchant.ToLower().Contains("refine ") && !foundRefine && !enchanted && hasEnchant.ToLower().IndexOf("refine ") != hasEnchant.ToLower().IndexOf("refine +6 effective"))
                    {
                        string refine = hasEnchant.ToLower();
                        refine = refine.Replace("\r\n", "\n");
                        while (refine.Contains("\n\n"))
                        {
                            refine = refine.Replace("\n\n", "\n");
                        }
                        refine = refine.Substring(refine.IndexOf("\nrefine ") + 8).Trim();
                        if (refine.IndexOf("\n") > 0)
                        {
                            refine = refine.Substring(0, refine.IndexOf("\n")).Trim();
                        }
                        Console.WriteLine(refine);
                        int refineLevel = 0;
                        if (refine.Contains("/"))
                        {
                            try
                            {
                                refineLevel = int.Parse(refine.Substring(0, refine.IndexOf("/")));
                                foundRefine = true;
                            }
                            catch (FormatException e)
                            {
                                scanInfo.Message = "Something is wrong, error parsing refine level: " + refine;
                                Console.WriteLine(e);
                                return(ScanResult.BuildError <ScanResultEquip>(scanInfo));
                            }
                        }
                        if (refine.Contains("atk+"))
                        {
                            int atk = int.Parse(refine.Substring(refine.IndexOf("atk+") + 4));
                            foundRefine = true;
                            //TODO: check if atk matches refineLevel
                        }
                        exchangeInfo.RefinementLevel = refineLevel;
                    }


                    if (hasEnchant.ToLower().Contains("enchanted"))
                    {
                        enchanted = true;
                    }
                    if (hasEnchant.ToLower().Contains("equipment upgrade"))
                    {
                        if (enchanted)
                        {
                            MemoryStream ms          = new MemoryStream();
                            var          jpegEncoder = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder {
                                Quality = 10
                            };
                            using (var image2 = Image.Load <Rgba32>($"enchant{i}.png"))
                                image2.Clone(ctx => ctx.Resize(new ResizeOptions {
                                    Size = image2.Size() / 2
                                })).SaveAsJpeg(ms, jpegEncoder);

                            exchangeInfo.EnchantmentImage = System.Convert.ToBase64String(ms.GetBuffer());
                            if (!hasEnchant.ToLower().Contains("enchanted"))
                            {
                                Console.WriteLine("Scrolled too far");
                                exchangeInfo.Enchantments = new List <string>()
                                {
                                    "scrolled too far"
                                };
                                break;
                            }
                            hasEnchant = hasEnchant.ToLower();
                            hasEnchant = hasEnchant.Replace("\r\n", "\n");
                            while (hasEnchant.Contains("\n\n"))
                            {
                                hasEnchant = hasEnchant.Replace("\n\n", "\n");
                            }
                            hasEnchant = hasEnchant.Substring(hasEnchant.IndexOf("enchanted attribute:") + 20).Trim();
                            hasEnchant = hasEnchant.Substring(0, hasEnchant.IndexOf("equipment upgrade")).Trim();

                            hasEnchant = hasEnchant.Replace("mapr ", "maxhp ");
                            exchangeInfo.Enchantments = hasEnchant.Split("\n", 4).ToList();
                        }
                        break;
                    }
                    if (hasEnchant.ToLower().Contains("exchange price"))
                    {
                        Console.WriteLine("Scrolled wayyyyyy too far");
                        break;
                    }


                    await android.Swipe(555, 500, 555, 300, 500);

                    await Task.Delay(100);

                    await android.Tap(1500, 960);

                    await android.Screenshot(fileName);

                    i++;
                }
                exchangeInfo.Found = true;
            }
            return(exchangeInfo);
        }
Пример #13
0
        public static MemoryStream Mark(MemoryStream inStream, string text, string fontPath)
        {
            text = $"···甘井子区重点车辆管理系统·{text}···";
            //首先先判断该图片是否是 gif动画,如果为gif动画不对图片进行改动
            using (Image <Rgba32> img = Image.Load(inStream.ToArray(), out IImageFormat format))
            {
                FontCollection fonts      = new FontCollection();
                FontFamily     fontFamily = fonts.Install(fontPath);

                if (fontFamily == null)
                {
                    SystemFonts.TryFind("DejaVu Sans", out fontFamily);
                }
                if (fontFamily == null)
                {
                    SystemFonts.TryFind("Book", out fontFamily);
                }
                if (fontFamily == null)
                {
                    SystemFonts.TryFind("DengXian", out fontFamily);
                }
                if (fontFamily == null)
                {
                    SystemFonts.TryFind("SimSun", out fontFamily);
                }
                if (fontFamily == null)
                {
                    SystemFonts.TryFind("Arial", out fontFamily);
                }
                if (fontFamily == null)
                {
                    fontFamily = SystemFonts.Families.First(t => t.Name.Contains("Hei") || t.Name.Contains("黑"));
                }
                if (fontFamily == null)
                {
                    fontFamily = SystemFonts.Families.First();
                }
                var font = fontFamily.CreateFont(14f);
                using (var img2 = img.Clone(ctx => ctx.ApplyScalingWaterMark(font, text, Rgba32.FromHex("ffffffdd"), 20, false)))
                {
                    IImageEncoder encoder = null;
                    if (format == ImageFormats.Bmp)
                    {
                        encoder = new SixLabors.ImageSharp.Formats.Bmp.BmpEncoder();
                    }
                    else if (format == ImageFormats.Jpeg)
                    {
                        encoder = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder();
                    }
                    else if (format == ImageFormats.Png)
                    {
                        encoder = new SixLabors.ImageSharp.Formats.Png.PngEncoder();
                    }
                    else if (format == ImageFormats.Gif)
                    {
                        encoder = new SixLabors.ImageSharp.Formats.Gif.GifEncoder();
                    }
                    MemoryStream outStream = new MemoryStream();
                    img2.Save(outStream, encoder);
                    outStream.Close();
                    return(outStream);
                }
            }
        }
Пример #14
0
        private void convertToZip(string filename)
        {
            if (string.IsNullOrEmpty(SelectedFilePath))
            {
                return;
            }

            if (File.Exists(filename))
            {
                if (MessageBox.Show("Overwrite?", "Save", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                {
                    File.Delete(filename);
                }
                else
                {
                    return;
                }
            }

            Task <int> task1 = Task.Run(() => {
                IsVisibleProgress     = Visibility.Visible;
                IsEnableProgressClose = false;

                var opts             = new SharpCompress.Writers.WriterOptions(CompressionType.Deflate);
                opts.ArchiveEncoding = new SharpCompress.Common.ArchiveEncoding();
                //opts.ArchiveEncoding.Default = System.Text.Encoding.GetEncoding("shift_jis");
                opts.ArchiveEncoding.Default = System.Text.Encoding.UTF8;

                using (var zip = File.OpenWrite(filename))
                    using (var zipWriter = WriterFactory.Open(zip, ArchiveType.Zip, opts))
                    {
                        ProgressOutFileName = SelectedFilePath;

                        IArchive archive = ArchiveFactory.Open(SelectedFilePath);
                        var entries      = archive.Entries.Where(e =>
                                                                 e.IsDirectory == false && (
                                                                     Path.GetExtension(e.Key).Equals(".jpg") ||
                                                                     Path.GetExtension(e.Key).Equals(".jpeg") ||
                                                                     Path.GetExtension(e.Key).Equals(".png") ||
                                                                     Path.GetExtension(e.Key).Equals(".bmp")));

                        var list      = entries.ToList();
                        ProgressMax   = list.Count;
                        ProgressValue = 0;
                        foreach (var item in entries.ToList())
                        {
                            ProgressFileName = item.Key;
                            var outStream    = new MemoryStream();

#if IMAGE_RESIZER
                            var instructions    = new Instructions();
                            instructions.Format = "jpg";

                            if (IsResize)
                            {
                                instructions.Width  = ImageWidth;
                                instructions.Height = ImageHeight;
                                instructions.Mode   = FitMode.Max;
                            }

                            if (IsCompress)
                            {
                                if (IsGrayscale)
                                {
                                    instructions.Grayscale = GrayscaleMode.Flat; // TODO: check mode
                                }

                                instructions.JpegSubsampling = JpegSubsamplingMode.Y4Cb2Cr0;
                                instructions.JpegQuality     = JpegQuality;
                            }

                            ImageBuilder.Current.Build(new ImageJob(item.OpenEntryStream(), outStream, instructions, false, true));
#endif
#if IMAGE_SHARP
                            using (Image image = Image.Load(item.OpenEntryStream()))
                            {
                                if (IsResize)
                                {
                                    image.Mutate(x => x
                                                 .Resize(new ResizeOptions
                                    {
                                        Mode = ResizeMode.Min,
                                        Size = new Size(ImageWidth, ImageHeight),
                                    })
                                                 );
                                }

                                if (IsCompress)
                                {
                                    if (IsGrayscale)
                                    {
                                        image.Mutate(x => x
                                                     .Grayscale()
                                                     );
                                    }

                                    // Use ImageSharp
                                    if (false)
                                    {
                                        var enc       = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder();
                                        enc.Quality   = JpegQuality;
                                        enc.Subsample = SixLabors.ImageSharp.Formats.Jpeg.JpegSubsample.Ratio444;
                                        if (ImageFormat == ImgFmt.IMG_444)
                                        {
                                            enc.Subsample = SixLabors.ImageSharp.Formats.Jpeg.JpegSubsample.Ratio444;
                                        }
                                        else if (ImageFormat == ImgFmt.IMG_420)
                                        {
                                            enc.Subsample = SixLabors.ImageSharp.Formats.Jpeg.JpegSubsample.Ratio420;
                                        }
                                        image.SaveAsJpeg(outStream, enc);
                                    }

                                    // Use MozJpeg
                                    if (true)
                                    {
                                        var bmpenc = new SixLabors.ImageSharp.Formats.Bmp.BmpEncoder();
                                        image.Save(outStream, bmpenc);
                                        outStream.Seek(0, SeekOrigin.Begin);

                                        var tjc = new MozJpegSharp.TJCompressor();
                                        var b   = new System.Drawing.Bitmap(outStream);
                                        //var compressed = tjc.Compress(b, MozJpegSharp.TJSubsamplingOption.Chrominance420, 75, MozJpegSharp.TJFlags.None);
                                        var compressed = tjc.Compress(b, MozJpegSharp.TJSubsamplingOption.Chrominance420, 30, MozJpegSharp.TJFlags.None);
                                        outStream      = new MemoryStream(compressed);
                                    }
                                }
                                else
                                {
                                    image.SaveAsJpeg(outStream);
                                }
                            }
#endif

                            outStream.Seek(0, SeekOrigin.Begin);
                            zipWriter.Write(item.Key, outStream);

                            ProgressValue++;
                        }
                    }

                IsEnableProgressClose = true;
                return(1);
            });
        }