Esempio n. 1
0
 /// <summary>Init new option instance</summary>
 /// <param name="compression">Compression type...self-explain</param>
 /// <param name="level">Compression level profile. A tradeoff of "quality vs. speed".</param>
 /// <param name="preset">Enumerate some predefined settings for WebPConfig, depending on the type of source picture.</param>
 /// <param name="quality">The quality of image. Value between 1 and 100.</param>
 public EncoderOptions(CompressionType compression, CompressionLevel level, WebPPreset preset, float quality)
 {
     this._quality         = quality;
     this.Preset           = preset;
     this.CompressionType  = compression;
     this.CompressionLevel = level;
 }
Esempio n. 2
0
        protected override void OnSaveT(Document input, Stream output, PropertyBasedSaveConfigToken token, Surface scratchSurface, ProgressEventHandler progressCallback)
        {
            int        quality = token.GetProperty <Int32Property>(PropertyNames.Quality).Value;
            WebPPreset preset  = (WebPPreset)token.GetProperty(PropertyNames.Preset).Value;

            WebPFile.Save(input, output, quality, preset, scratchSurface, progressCallback);
        }
Esempio n. 3
0
        public int WebPConfigInitInternal(WebPPreset preset, float quality, int version)
        {
            if (version != Global.WEBP_ENCODER_ABI_VERSION)
            {
                return 0;   // caller/system version mismatch!
            }

            this.quality = quality;
            this.target_size = 0;
            this.target_PSNR = 0.0f;
            this.method = 4;
            this.sns_strength = 50;
            this.filter_strength = 20;   // default: light filtering
            this.filter_sharpness = 0;
            this.filter_type = 0;        // default: simple
            this.partitions = 0;
            this.segments = 4;
            this.pass = 1;
            this.show_compressed = 0;
            this.preprocessing = 0;
            this.autofilter = 0;
            this.partition_limit = 0;
            this.alpha_compression = 1;
            this.alpha_filtering = 1;
            this.alpha_quality = 100;

            // TODO(skal): tune.
            switch (preset)
            {
                case WebPPreset.WEBP_PRESET_PICTURE:
                    this.sns_strength = 80;
                    this.filter_sharpness = 4;
                    this.filter_strength = 35;
                    break;
                case WebPPreset.WEBP_PRESET_PHOTO:
                    this.sns_strength = 80;
                    this.filter_sharpness = 3;
                    this.filter_strength = 30;
                    break;
                case WebPPreset.WEBP_PRESET_DRAWING:
                    this.sns_strength = 25;
                    this.filter_sharpness = 6;
                    this.filter_strength = 10;
                    break;
                case WebPPreset.WEBP_PRESET_ICON:
                    this.sns_strength = 0;
                    this.filter_strength = 0;   // disable filtering to retain sharpness
                    break;
                case WebPPreset.WEBP_PRESET_TEXT:
                    this.sns_strength = 0;
                    this.filter_strength = 0;   // disable filtering to retain sharpness
                    this.segments = 2;
                    break;
                case WebPPreset.WEBP_PRESET_DEFAULT:
                default:
                    break;
            }
            return this.WebPValidateConfig();
        }
Esempio n. 4
0
        /// <summary>
        /// The WebP save function.
        /// </summary>
        /// <param name="input">The input Document.</param>
        /// <param name="output">The output Stream.</param>
        /// <param name="quality">The WebP save quality.</param>
        /// <param name="preset">The WebP encoding preset.</param>
        /// <param name="keepMetadata"><c>true</c> if metadata should be preserved; otherwise <c>false</c>.</param>
        /// <param name="scratchSurface">The scratch surface.</param>
        /// <param name="progressCallback">The progress callback.</param>
        /// <exception cref="FormatException">The image exceeds 16383 pixels in width and/or height.</exception>
        /// <exception cref="OutOfMemoryException">Insufficient memory to save the image.</exception>
        /// <exception cref="WebPException">The encoder returned a non-memory related error.</exception>
        internal static void Save(
            Document input,
            Stream output,
            int quality,
            WebPPreset preset,
            bool keepMetadata,
            Surface scratchSurface,
            ProgressEventHandler progressCallback)
        {
            if (input.Width > WebPNative.WebPMaxDimension || input.Height > WebPNative.WebPMaxDimension)
            {
                throw new FormatException(Resources.InvalidImageDimensions);
            }

            WebPNative.EncodeParams encParams = new WebPNative.EncodeParams
            {
                quality = quality,
                preset  = preset
            };

            using (RenderArgs ra = new RenderArgs(scratchSurface))
            {
                input.Render(ra, true);
            }

            WebPNative.MetadataParams metadata = null;
            if (keepMetadata)
            {
                metadata = CreateWebPMetadata(input, scratchSurface);
            }

            WebPNative.WebPReportProgress encProgress = null;

            if (progressCallback != null)
            {
                encProgress = delegate(int percent)
                {
                    try
                    {
                        progressCallback(null, new ProgressEventArgs(percent, true));
                        return(true);
                    }
                    catch (OperationCanceledException)
                    {
                        return(false);
                    }
                };
            }

            WebPNative.WebPSave(scratchSurface, output, encParams, metadata, encProgress);
        }
Esempio n. 5
0
        /// <summary>
        /// This function will initialize the configuration according to a predefined set of parameters (referred to by 'preset') and a given quality factor.
        /// </summary>
        /// <param name="config">The WebPConfig struct</param>
        /// <param name="preset">Type of image</param>
        /// <param name="quality">Quality of compresion</param>
        /// <returns>0 if error</returns>
        public static int WebPConfigInit(ref WebPConfig config, WebPPreset preset, float quality)
        {
            switch (IntPtr.Size)
            {
            case 4:
                return(WebPConfigInitInternal_x86(ref config, preset, quality, WEBP_DECODER_ABI_VERSION));

            case 8:
                return(WebPConfigInitInternal_x64(ref config, preset, quality, WEBP_DECODER_ABI_VERSION));

            default:
                throw new InvalidOperationException("Invalid platform. Can not find proper function");
            }
        }
Esempio n. 6
0
 /// <summary>
 /// This function will initialize the configuration according to a predefined
 /// set of parameters (referred to by 'preset') and a given quality factor.
 /// This function can be called as a replacement to WebPConfigInit(). Will return false in case of error.
 /// </summary>
 /// <param name="config"></param>
 /// <param name="preset"></param>
 /// <param name="quality"></param>
 /// <returns></returns>
 public static int WebPConfigPreset(ref WebPConfig config, WebPPreset preset, float quality)
 {
     if (GetPlatformName() == "android")
     {
         return(NativeBindings_Android.WebPConfigInit(ref config));
     }
     else if (GetPlatformName() == "ios")
     {
         return(NativeBindings_iOS.WebPConfigInit(ref config));
     }
     else
     {
         return(NativeBindings_OSX.WebPConfigInit(ref config));
     }
 }
Esempio n. 7
0
 public static extern int WebPConfigInitInternal(ref WebPConfig param0, WebPPreset param1, float param2, int param3);
Esempio n. 8
0
 /// <summary>
 /// This function will initialize the configuration according to a predefined
 /// set of parameters (referred to by 'preset') and a given quality factor.
 /// This function can be called as a replacement to WebPConfigInit(). Will return false in case of error.
 /// </summary>
 /// <param name="config"></param>
 /// <param name="preset"></param>
 /// <param name="quality"></param>
 /// <returns></returns>
 public static int WebPConfigPreset(ref WebPConfig config, WebPPreset preset, float quality)
 {
     return(NativeMethods.WebPConfigInitInternal(ref config, preset, quality, WEBP_ENCODER_ABI_VERSION));
 }
Esempio n. 9
0
 private static extern int WebPConfigInitInternal_x64(ref WebPConfig config, WebPPreset preset, float quality, int WEBP_DECODER_ABI_VERSION);
Esempio n. 10
0
 /// <summary>
 /// This function will initialize the configuration according to a predefined
 /// set of parameters (referred to by 'preset') and a given quality factor.
 /// This function can be called as a replacement to WebPConfigInit(). Will return false in case of error.
 /// </summary>
 /// <param name="config"></param>
 /// <param name="preset"></param>
 /// <param name="quality"></param>
 /// <returns></returns>
 public static int WebPConfigPreset(ref WebPConfig config, WebPPreset preset, float quality)
 {
     return NativeMethods.WebPConfigInitInternal(ref config, preset, quality, WEBP_ENCODER_ABI_VERSION);
 }
Esempio n. 11
0
 public static extern int WebPConfigInitInternal(ref WebPConfig param0, WebPPreset param1, float param2, int param3);
Esempio n. 12
0
 public static int WebPConfigPreset(WebPConfig *config, WebPPreset preset, float quality)
 {
     return(WebPConfigInitInternal(config, preset, quality, 0x020f));
 }
Esempio n. 13
0
 public static extern int WebPConfigInitInternal(ref WebPConfig config, WebPPreset preset, float quality, int version);
Esempio n. 14
0
 /// <summary>Init new option instance</summary>
 /// <param name="preset">Enumerate some predefined settings for WebPConfig, depending on the type of source picture.</param>
 public EncoderOptions(WebPPreset preset) : this(preset, 75f)
 {
 }
Esempio n. 15
0
 /// <summary>Init new option instance</summary>
 /// <param name="preset">Enumerate some predefined settings for WebPConfig, depending on the type of source picture.</param>
 /// <param name="quality">The quality of image. Value between 1 and 100.</param>
 public EncoderOptions(WebPPreset preset, float quality) : this(CompressionType.Lossy, CompressionLevel.Default, preset, quality)
 {
 }