sig
  val magick_core_genesis : unit -> unit
  val magick_core_terminus : unit -> unit
  type exception_info
  val magick_exception_info_acquire : unit -> Magick.exception_info
  val magick_exception_info_destroy : Magick.exception_info -> unit
  type image_info
  val magick_image_info_clone : unit -> Magick.image_info
  val magick_image_info_destroy : Magick.image_info -> unit
  val magick_image_info_clone_some : Magick.image_info -> Magick.image_info
  val magick_image_info_set_filename : Magick.image_info -> string -> unit
  val magick_image_info_set_size : Magick.image_info -> string -> unit
  external _magick_exception_info_acquire : unit -> Magick.exception_info
    = "caml_magick_exception_info_acquire"
  external _magick_exception_info_destroy : Magick.exception_info -> unit
    = "caml_magick_exception_info_destroy"
  external _magick_image_info_clone : unit -> Magick.image_info
    = "caml_magick_image_info_clone"
  external _magick_image_info_destroy : Magick.image_info -> unit
    = "caml_magick_image_info_destroy"
  external _magick_image_info_clone_some :
    Magick.image_info -> Magick.image_info
    = "caml_magick_image_info_clone_some"
  external _magick_image_info_set_size : Magick.image_info -> string -> unit
    = "caml_magick_image_info_set_size"
  external _magick_image_info_is_null : Magick.image_info -> bool
    = "caml_magick_image_info_is_null"
  external _magick_core_genesis : string array -> unit
    = "caml_magick_core_genesis"
  external _magick_core_terminus : unit -> unit = "caml_magick_core_terminus"
  type image
  val magick_image_destroy : Magick.image -> unit
  val magick_image_set_filename : Magick.image -> string -> unit
  val magick_image_read :
    Magick.image_info -> Magick.exception_info -> Magick.image
  val magick_image_write :
    Magick.image_info -> Magick.image -> Magick.exception_info -> unit
  type color = int * int * int * int
  val magick_image_new :
    Magick.image_info ->
    int -> int -> Magick.color -> Magick.exception_info -> Magick.image
  val magick_image_display :
    Magick.image_info -> Magick.image -> Magick.exception_info -> unit
  val magick_image_blur :
    Magick.image ->
    radius:float -> sigma:float -> Magick.exception_info -> Magick.image
  type pixel_interpolate_method =
      Undefined
    | Average
    | Average9
    | Average16
    | Background
    | Bilinear
    | Blend
    | Catrom
    | Integer
    | Mesh
    | Nearest
    | Spline
  val magick_image_spread :
    Magick.image ->
    meth:Magick.pixel_interpolate_method ->
    radius:float -> Magick.exception_info -> Magick.image
  val magick_image_sharpen :
    Magick.image ->
    radius:float -> sigma:float -> Magick.exception_info -> Magick.image
  val magick_image_shade :
    Magick.image ->
    gray:bool ->
    azimuth:float -> elevation:float -> Magick.exception_info -> Magick.image
  val magick_image_emboss :
    Magick.image ->
    radius:float -> sigma:float -> Magick.exception_info -> Magick.image
  val magick_image_edge :
    Magick.image -> radius:float -> Magick.exception_info -> Magick.image
  val magick_image_despeckle :
    Magick.image -> Magick.exception_info -> Magick.image
  val magick_image_charcoal :
    Magick.image ->
    radius:float -> sigma:float -> Magick.exception_info -> Magick.image
  type noise_type =
      UndefinedNoise
    | UniformNoise
    | GaussianNoise
    | MultiplicativeGaussianNoise
    | ImpulseNoise
    | LaplacianNoise
    | PoissonNoise
    | RandomNoise
  val magick_image_add_noise :
    Magick.image ->
    noise:Magick.noise_type ->
    attenuate:float -> Magick.exception_info -> Magick.image
  val magick_image_solarize :
    Magick.image -> threshold:float -> Magick.exception_info -> unit
  val magick_image_modulate :
    Magick.image -> modulate:string -> Magick.exception_info -> unit
  val magick_image_negate : Magick.image -> Magick.exception_info -> unit
  val magick_image_equalize : Magick.image -> Magick.exception_info -> unit
  val magick_image_scale :
    Magick.image -> int * int -> Magick.exception_info -> Magick.image
  module ColorSpace :
    sig
      type t =
          Undefined
        | RGB
        | GRAY
        | Transparent
        | OHTA
        | Lab
        | XYZ
        | YCbCr
        | YCC
        | YIQ
        | YPbPr
        | YUV
        | CMYK
        | SRGB
        | HSB
        | HSL
        | HWB
        | Rec601YCbCr
        | Rec709YCbCr
        | Log
        | CMY
        | Luv
        | HCL
        | LCH
        | LMS
        | LCHab
        | LCHuv
        | ScRGB
        | HSI
        | HSV
        | HCLp
        | YDbDr
        | XyY
        | LinearGRAY
    end
  val magick_image_colorspace_transform :
    Magick.image -> Magick.ColorSpace.t -> Magick.exception_info -> unit
  module CompositeOp :
    sig
      type t =
          Undefined
        | No
        | ModulusAdd
        | Atop
        | Blend
        | Bumpmap
        | ChangeMask
        | Clear
        | ColorBurn
        | ColorDodge
        | Colorize
        | CopyBlack
        | CopyBlue
        | Copy
        | CopyCyan
        | CopyGreen
        | CopyMagenta
        | CopyRed
        | CopyYellow
        | Darken
        | DstAtop
        | Dst
        | DstIn
        | DstOut
        | DstOver
        | Difference
        | Displace
        | Dissolve
        | Exclusion
        | HardLight
        | Hue
        | In
        | Lighten
        | LinearLight
        | Luminize
        | MinusDst
        | Modulate
        | Multiply
        | Out
        | Over
        | Overlay
        | Plus
        | Replace
        | Saturate
        | Screen
        | SoftLight
        | SrcAtop
        | Src
        | SrcIn
        | SrcOut
        | SrcOver
        | ModulusSubtract
        | Threshold
        | Xor
        | DivideDst
        | Distort
        | Blur
        | PegtopLight
        | VividLight
        | PinLight
        | LinearDodge
        | LinearBurn
        | Mathematics
        | DivideSrc
        | MinusSrc
        | DarkenIntensity
        | LightenIntensity
        | HardMix
        | Stereo
      val of_string : string -> Magick.CompositeOp.t
      val to_string : Magick.CompositeOp.t -> string
    end
  val magick_image_composite :
    Magick.image ->
    Magick.image ->
    Magick.CompositeOp.t -> int * int -> Magick.exception_info -> unit
  type draw_info
  val magick_draw_info_acquire : unit -> Magick.draw_info
  val magick_draw_info_destroy : Magick.draw_info -> unit
  val magick_draw_info_set_fill : Magick.draw_info -> Magick.color -> unit
  val magick_draw_info_set_stroke : Magick.draw_info -> Magick.color -> unit
  val magick_draw_info_set_stroke_width : Magick.draw_info -> float -> unit
  val magick_draw_info_set_primitive : Magick.draw_info -> string -> unit
  val magick_draw_info_set_font : Magick.draw_info -> string -> unit
  val magick_draw_info_set_pointsize : Magick.draw_info -> float -> unit
  val magick_draw_info_set_compose :
    Magick.draw_info -> Magick.CompositeOp.t -> unit
  val magick_image_draw :
    Magick.image -> Magick.draw_info -> Magick.exception_info -> unit
  val magick_get_quantum_depth : unit -> int
  val magick_get_quantum_range : unit -> float
  val magick_get_quantum_scale : unit -> float
  val magick_get_max_map : unit -> int
  val magick_get_max_colormap_size : unit -> int
  module Magick :
    sig
      val image_read : string -> Magick.image
      val new_image : int -> int -> Magick.color -> Magick.image
      val image_display : Magick.image -> unit
      val image_write : Magick.image -> filename:string -> unit
      val image_charcoal :
        Magick.image -> radius:float -> sigma:float -> Magick.image
      val image_blur :
        Magick.image -> radius:float -> sigma:float -> Magick.image
      val image_spread :
        Magick.image ->
        meth:Magick.pixel_interpolate_method -> radius:float -> Magick.image
      val image_sharpen :
        Magick.image -> radius:float -> sigma:float -> Magick.image
      val image_shade :
        Magick.image ->
        gray:bool -> azimuth:float -> elevation:float -> Magick.image
      val image_edge : Magick.image -> radius:float -> Magick.image
      val image_despeckle : Magick.image -> Magick.image
      val image_emboss :
        Magick.image -> radius:float -> sigma:float -> Magick.image
      val image_colorspace_transform :
        Magick.image -> Magick.ColorSpace.t -> unit
      val image_scale : Magick.image -> size:int * int -> Magick.image
      val image_composite :
        Magick.image ->
        Magick.image -> Magick.CompositeOp.t -> int * int -> unit
      val image_modulate : Magick.image -> modulate:int * int * int -> unit
      val image_brightness : Magick.image -> int -> unit
      val image_saturation : Magick.image -> int -> unit
      val image_hue : Magick.image -> int -> unit
      val image_negate : Magick.image -> unit
      val image_equalize : Magick.image -> unit
      val image_solarize : Magick.image -> threshold:float -> unit
      val image_add_noise :
        Magick.image -> Magick.noise_type -> float -> Magick.image
      module Color :
        sig
          type t = Magick.color
          val map8 : Magick.Magick.Color.t -> Magick.Magick.Color.t
        end
      module Prim :
        sig
          type t
          val draw_point : int * int -> Magick.Magick.Prim.t
          val draw_line : int * int -> int * int -> Magick.Magick.Prim.t
          val draw_rectangle : int * int -> int * int -> Magick.Magick.Prim.t
          val draw_circle : int * int -> int -> Magick.Magick.Prim.t
          val draw_ellipse : int * int -> int * int -> Magick.Magick.Prim.t
          val draw_qbcurve :
            int * int -> int * int -> int * int -> Magick.Magick.Prim.t
          val draw_cbcurve :
            int * int ->
            int * int -> int * int -> int * int -> Magick.Magick.Prim.t
          val draw_round_rectangle :
            int * int -> int * int -> int * int -> Magick.Magick.Prim.t
          val draw_polygon : (int * int) list -> Magick.Magick.Prim.t
          val draw_text : int * int -> string -> string
        end
      val fill_primitive :
        Magick.image ->
        prim:Magick.Magick.Prim.t ->
        ?fill:Magick.Magick.Color.t -> unit -> unit
      val stroke_primitive :
        Magick.image ->
        prim:Magick.Magick.Prim.t ->
        ?stroke:Magick.Magick.Color.t -> ?stroke_width:float -> unit -> unit
      val draw_text :
        Magick.image ->
        pos:int * int ->
        s:string ->
        ?font:string ->
        ?pointsize:float ->
        ?fill:Magick.Magick.Color.t ->
        ?stroke:Magick.Magick.Color.t -> ?stroke_width:float -> unit -> unit
    end
  type exception_type =
      UndefinedException
    | WarningException
    | TypeWarning
    | OptionWarning
    | DelegateWarning
    | MissingDelegateWarning
    | CorruptImageWarning
    | FileOpenWarning
    | BlobWarning
    | StreamWarning
    | CacheWarning
    | CoderWarning
    | FilterWarning
    | ModuleWarning
    | DrawWarning
    | ImageWarning
    | WandWarning
    | RandomWarning
    | XServerWarning
    | MonitorWarning
    | RegistryWarning
    | ConfigureWarning
    | PolicyWarning
    | ErrorException
    | TypeError
    | OptionError
    | DelegateError
    | MissingDelegateError
    | CorruptImageError
    | FileOpenError
    | BlobError
    | StreamError
    | CacheError
    | CoderError
    | FilterError
    | ModuleError
    | DrawError
    | ImageError
    | WandError
    | RandomError
    | XServerError
    | MonitorError
    | RegistryError
    | ConfigureError
    | PolicyError
    | FatalErrorException
    | TypeFatalError
    | OptionFatalError
    | DelegateFatalError
    | MissingDelegateFatalError
    | CorruptImageFatalError
    | FileOpenFatalError
    | BlobFatalError
    | StreamFatalError
    | CacheFatalError
    | CoderFatalError
    | FilterFatalError
    | ModuleFatalError
    | DrawFatalError
    | ImageFatalError
    | WandFatalError
    | RandomFatalError
    | XServerFatalError
    | MonitorFatalError
    | RegistryFatalError
    | ConfigureFatalError
    | PolicyFatalError
    | UnknownException
  val magick_exception_info_reason : Magick.exception_info -> string
  val magick_exception_info_description : Magick.exception_info -> string
  val magick_exception_info_severity :
    Magick.exception_info -> Magick.exception_type
  val exception_severity_string : Magick.exception_type -> string
  val magick_exception_info_severity_string : Magick.exception_info -> string
end