将图像与Jupyter笔记本合并为一个文件



当我们在jupyter笔记本中加载图像时,实际上我们有两个文件。有没有办法将两个文件合并到一个笔记本文件中?非常感谢。

在代码单元格中

当你在代码单元格中使用如下代码来显示笔记本内图像文件中的图像时,它实际上会以base64:的形式在笔记本内编码

#use code like below to show images as output line because encodes as Base64 code saved within the notebook file
from IPython.display import Image
Image("<myimage_file>.png")

最简单的方法是运行这样一个单元格,保存笔记本,并在文本编辑器中检查笔记本的底层文本。(这在Jupyter是可能的。(

对于相应的代码,您现在应该看到这样的内容:

"cell_type": "code",
"execution_count": 1,
"id": "72bb5e3d-85c4-4c82-bb18-b466e06b98e7",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUg ...

CCD_ 1表示具有以base64编码的图像数据的长字符串。重要的是,如果您现在拿着保存的笔记本,在没有图像文件的其他地方打开一个新的Jupyter会话,然后打开Jupyter笔记本,只要您不尝试在单元格中运行代码,即使没有图像文件,图像也会保持可见。如果你手边没有另一台Jupyter电脑,你可以测试一下,方法是点击这里,点击launch binder,从MyBinder.org提供的远程系统启动一个可以在浏览器中访问的临时笔记本会话,然后将保存的笔记本文件拖放到左侧的文件浏览器窗格中。双击打开笔记本,即使远程系统没有您的文件,您也应该看到您的笔记本打开并显示图像。如果你运行这个单元,它不会喜欢没有文件,因此Jupyter笔记本电脑数据管理的最佳实践是将笔记本和相关文件放在项目文件夹中,并传输整个目录

有一些方法可以从base64返回到文件,所以只要你有编码的笔记本,你就可以重新生成图像,请参阅这里,它是基于这个stackoverflow帖子将string文本转换为字节的。然而,我发现用string.encode()替换我建议的代码的str.encode(string)部分,根据这里的说法,这可能会更好。

在Markdown单元格中

不幸的是,上次我知道Markdown单元格不会有这种行为,所以你必须做额外的步骤才能将图像编码到笔记本的Markdown单元格中。正如这篇题为"在ipython笔记本中嵌入图像以供分发"的文章底部所讨论的那样,这是可以做到的。(IPython笔记本是Jupyter笔记本的早期版本,增加了对许多内核语言的支持。(

我在这里存储了一个笔记本,演示使用遵循该过程的结果将图像嵌入笔记本中的标记代码,并提供了一些链接,指向我过去将其组合在一起的内容。在文本编辑器中查看笔记本下面的文本,你会发现图像代码是嵌入的,通过在其他地方打开它,你会确认它是可移植的。生成这样的base64编码图像代码的过程我从这里的答案改编为"将图像嵌入jupyter笔记本并导出到HTML":

%pip install pillow
image_to_convert = "<your_img_file_name_here>.png"
import base64, io, IPython
from PIL import Image as PILImage
image = PILImage.open(image_to_convert )
output = io.BytesIO()
image.save(output, format='PNG')
encoded_string = base64.b64encode(output.getvalue()).decode()
html = '<img src="data:image/png;base64,{}"/>'.format(encoded_string)
print("COPY THE TEXT BELOW INTO A MARKDOWN CELL:")
print(html)

关于将编码为Base64的图像放入img标签,我发现这非常有用。

有人在这里发布了代码,从笔记本上获取base64编码的图像,并将其嵌入markdown中;不过,我还没试过。我还尝试了这个答案的早期部分,"如何在jupyter笔记本中嵌入图像或图片,无论是从本地机器还是从网络资源?"这是对这一点的另一种看法;然而,我确实测试了在笔记本的降价单元格中生成的代码会产生一个微笑。(事实上,您可以将括号之间以data开头的部分粘贴到浏览器的URL栏中,也可以看到图像。(

相关内容

最新更新