Как изменить IOContext по умолчанию в блокноте IJulia

В блокноте IJulia у меня есть ячейка, которая загружает изображение из моей файловой системы, а затем разбивает его на несколько других изображений, но когда они отображаются, они слишком малы.

using Images
using FileIO

path = "samples/201478670932639746-3.png"
img = load(path)

height, width = size(img)
print((height, width))
lines = [
    (@view img[20:55, :]),
    (@view img[70:105, :]),
    (@view img[120:155, :]),
    (@view img[155:end, :])
]

Результат выглядит следующим образом:

Я просмотрел html-код и изображение:

<img style="max-width: 100px; max-height:100px;display:inline" src="data:image/png;base64,some_base64_data">

Итак, я прочитал документацию JuliaImages, чтобы посмотреть, как изображения отображаются в блокноте: https://juliaimages.org/latest/quickstart/#Display-1

Мы можем прочитать здесь, что пакет ImageShow используется для отображения изображения на ноутбуке, поэтому я перехожу к исходному коду пакета на github: https://github.com/JuliaImages/ImageShow.jl/blob/master/src/showmime.jl#L114

    w,h=get(io, :thumbnailsize, (100,100))
    im_resized = downsize_for_thumbnail(img, w, h)
    thumbnail_style = get(io, :thumbnail, false) ? "max-width: $(w)px; max-height:$(h)px;" : ""

мы можем видеть здесь, что они ищут :thumbnail в io, а значение по умолчанию (100,100). Я полагаю, io это IOContext, указанное в блокноте.

Итак, как я могу написать в IOContext блокнота IJulia, чтобы изменить размер эскиза?


person aret    schedule 08.03.2020    source источник


Ответы (1)


Как правило, изменение поведения по умолчанию внутренних функций внешнего пакета может вызвать проблемы при изменении версий, поэтому следите за поломкой при обновлении ImageShow.jl! Но если вам нужно, вы можете перегрузить функцию, сохранив код таким же, за исключением изменения того, что жестко запрограммировано:

using IJulia
using ImageShow

import ImageShow.show_element

const mydim = [(100, 100)]
function ImageShow.show_element(io::IOContext, img)
    io2=IOBuffer()
    w,h=get(io, :thumbnailsize, mydim[1])
    im_resized = ImageShow.downsize_for_thumbnail(img, w, h)
    thumbnail_style = get(io, :thumbnail, false) ? "max-width: $(w)px; max-height:$(h)px;" : ""
    b64pipe=ImageShow.Base64EncodePipe(io2)
    write(io,"<img style='$(thumbnail_style)display:inline' src=\"data:image/png;base64,")
    show(b64pipe, MIME"image/png"(), im_resized)
    write(io, read(seekstart(io2)))
    write(io,"\">")
end

mydim[1] = (500, 500)
person Bill    schedule 08.03.2020