diff --git a/Project.toml b/Project.toml index 2ac60cf..0522f1a 100644 --- a/Project.toml +++ b/Project.toml @@ -4,12 +4,14 @@ version = "1.2.2" [deps] FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +Ghostscript_jll = "61579ee1-b43e-5ca0-a5da-69d92c66a64b" ImageCore = "a09fc81d-aa75-5fe9-8630-4744c3626534" ImageMagick_jll = "c73af94c-d91f-53ed-93a7-00f77d67a9d7" InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" [compat] FileIO = "1" +Ghostscript_jll = "= 9.55.0" ImageCore = "0.8.1, 0.9" ImageMagick_jll = "= 6.9.10" julia = "1.3" diff --git a/src/ImageMagick.jl b/src/ImageMagick.jl index 4da34d2..934eff9 100755 --- a/src/ImageMagick.jl +++ b/src/ImageMagick.jl @@ -5,6 +5,7 @@ using InteractiveUtils: subtypes using ImageCore using ImageMagick_jll using Base: convert +using Ghostscript_jll Color1{T} = Color{T,1} Color2{T,C<:Color1} = TransparentColor{C,T,2} diff --git a/src/libmagickwand.jl b/src/libmagickwand.jl index 52cd95f..1323b0a 100644 --- a/src/libmagickwand.jl +++ b/src/libmagickwand.jl @@ -269,25 +269,31 @@ function pingimage(wand::MagickWand, filename::AbstractString) nothing end -function readimage(wand::MagickWand, filename::AbstractString) +function readimage(wand::MagickWand, from) + withenv("PATH" => "$(Ghostscript_jll.PATH[]):$(ENV["PATH"])") do + _readimage(wand, from) + end +end + +function _readimage(wand::MagickWand, filename::AbstractString) status = ccall((:MagickReadImage, libwand), Cint, (Ptr{Cvoid}, Ptr{UInt8}), wand, filename) status == 0 && error(wand) nothing end -function readimage(wand::MagickWand, stream::IO) +function _readimage(wand::MagickWand, stream::IO) status = ccall((:MagickReadImageFile, libwand), Cint, (Ptr{Cvoid}, Ptr{Cvoid}), wand, Libc.FILE(stream).ptr) status == 0 && error(wand) nothing end -function readimage(wand::MagickWand, stream::Vector{UInt8}) +function _readimage(wand::MagickWand, stream::Vector{UInt8}) status = ccall((:MagickReadImageBlob, libwand), Cint, (Ptr{Cvoid}, Ptr{Cvoid}, Cint), wand, stream, length(stream)*sizeof(eltype(stream))) status == 0 && error(wand) nothing end -readimage(wand::MagickWand, stream::IOBuffer) = readimage(wand, stream.data) +_readimage(wand::MagickWand, stream::IOBuffer) = readimage(wand, stream.data) function writeimage(wand::MagickWand, filename::AbstractString) status = ccall((:MagickWriteImages, libwand), Cint, (Ptr{Cvoid}, Ptr{UInt8}, Cint), wand, filename, true)