如何在IJulia笔记本中更改默认的IOContext

时间:2020-03-08 07:26:08

标签: jupyter-notebook julia jupyter ijulia-notebook

在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

那么,如何更改IJulia笔记本的IOContext来更改缩略图大小?

1 个答案:

答案 0 :(得分:0)

通常,更改外部软件包的内部功能的默认行为会在版本更改时引起问题,因此请注意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)