Как изменить стандартный IOContext в блокноте IJulia - PullRequest
0 голосов
/ 08 марта 2020

В записной книжке 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 для изменения размера миниатюры?

1 Ответ

0 голосов
/ 08 марта 2020

В общем, изменение поведения по умолчанию внутренних функций внешнего пакета может вызвать проблемы при изменении версий, так что следите за поломками при обновлении 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)
...