/// <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; }
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); }
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(); }
/// <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); }
/// <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"); } }
/// <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)); } }
public static extern int WebPConfigInitInternal(ref WebPConfig param0, WebPPreset param1, float param2, int param3);
/// <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)); }
private static extern int WebPConfigInitInternal_x64(ref WebPConfig config, WebPPreset preset, float quality, int WEBP_DECODER_ABI_VERSION);
/// <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); }
public static int WebPConfigPreset(WebPConfig *config, WebPPreset preset, float quality) { return(WebPConfigInitInternal(config, preset, quality, 0x020f)); }
public static extern int WebPConfigInitInternal(ref WebPConfig config, WebPPreset preset, float quality, int version);
/// <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) { }
/// <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) { }