本文围绕[Python] 用 Pillow 来绘制北欧五国的国旗实战解析展开,先梳理核心概念,再结合实践场景说明步骤、代码思路和容易忽略的细节,方便后续直接参考。
背景 Pillow 中提供了关于 Pillowtext{Pillow}Pillow 模块的介绍。我想用 Pillowtext{Pillow}Pillow 来生成些简单的图案,以巩固学习的效果。北欧五国(即,瑞典、芬兰、挪威、丹麦、冰岛)的国
Pillow 中提供了关于 Pillowtext{Pillow}Pillow 模块的介绍。我想用 Pillowtext{Pillow}Pillow 来生成些简单的图案,以巩固学习的效果。北欧五国(即,瑞典、芬兰、挪威、丹麦、冰岛)的国旗图案比较简单,可以从这些国旗开始
说明:本文有不少文字是从 [Python] 用 turtle 来绘制北欧五国的国旗 一文复制的。
这五个国家的国旗是这样的 ⬇️

考虑到瑞典、芬兰、丹麦的国旗的模式更为简单,本文会先分析瑞典国旗的绘制方法。有了瑞典国旗作为基础,只需要对代码做少量修改,就可以画出芬兰国旗和丹麦国旗。
在此基础上,我们可以画出挪威国旗和冰岛国旗。
根据 Sweden 网页所提供的信息,瑞典国旗中各部分的比例如下图所示

我在别的网站上搜到了瑞典国旗中,蓝色和黄色的具体数值(下图中给出了两组数值,我们就用 NCStext{NCS}NCS 那一组吧)。

我的整体思路是这样的 ⬇️
在此基础上,可以写出完整的 Pythontext{Python}Python 代码 ⬇️ (trae 提供了一些帮助)
复制代码from PIL import Image # ===================== 常量定义 ===================== BLUE = (0, 85, 131) YELLOW = (255, 194, 0)PIXEL_CNT = 20# 瑞典国旗的比例 (5:2:9 / 4:2:4) LEFT_FIELD = 5 * PIXEL_CNT CROSS_WIDTH = 2 * PIXEL_CNT RIGHT_FIELD = 9 * PIXEL_CNT TOP_FIELD = 4 * PIXEL_CNT BOTTOM_FIELD = 4 * PIXEL_CNT WIDTH = LEFT_FIELD + CROSS_WIDTH + RIGHT_FIELD HEIGHT = TOP_FIELD + CROSS_WIDTH + BOTTOM_FIELD img = Image.new('RGB', (WIDTH, HEIGHT)) pixels = img.load()for x in range(WIDTH): for y in range(HEIGHT): if x >= LEFT_FIELD and x < (LEFT_FIELD + CROSS_WIDTH): pixels[x, y] = YELLOW elif y >= TOP_FIELD and y < (TOP_FIELD + CROSS_WIDTH): pixels[x, y] = YELLOW else: pixels[x, y] = BLUE def main(): img.show() img.save('sweden.png') if __name__ == "__main__": main() 请将以上 Pythontext{Python}Python 程序保存为 sweden.pytext{sweden.py}sweden.py。使用如下命令可以运行 sweden.pytext{sweden.py}sweden.py
复制代码python3 sweden.py 运行完之后,当前目录会生成一张名为 sweden.pngtext{sweden.png}sweden.png 的图片。示例效果如下图所示

根据 Finland 网页所提供的信息,芬兰国旗中各部分的比例如下图所示

我在别的网站上搜到了芬兰国旗中,白色和蓝色的具体数值 ⬇️

上文已经展示了瑞典国旗的绘制方式,我们可以用类似的方式来绘制芬兰国旗 ⬇️
在此基础上,可以写出完整的 Pythontext{Python}Python 代码 ⬇️ (trae 提供了一些帮助)
复制代码from PIL import Image # ===================== 常量定义 ===================== WHITE = (255, 255, 255) BLUE = (0, 47, 108)PIXEL_CNT = 20# 芬兰国旗的比例(5:3:10 / 4:3:4) LEFT_FIELD = 5 * PIXEL_CNT CROSS_WIDTH = 3 * PIXEL_CNT RIGHT_FIELD = 10 * PIXEL_CNT TOP_FIELD = 4 * PIXEL_CNT BOTTOM_FIELD = 4 * PIXEL_CNT WIDTH = LEFT_FIELD + CROSS_WIDTH + RIGHT_FIELD HEIGHT = TOP_FIELD + CROSS_WIDTH + BOTTOM_FIELD img = Image.new('RGB', (WIDTH, HEIGHT)) pixels = img.load()for x in range(WIDTH): for y in range(HEIGHT): if x >= LEFT_FIELD and x < (LEFT_FIELD + CROSS_WIDTH): pixels[x, y] = BLUE elif y >= TOP_FIELD and y < (TOP_FIELD + CROSS_WIDTH): pixels[x, y] = BLUE else: pixels[x, y] = WHITE def main(): img.show() img.save('finland.png') if __name__ == "__main__": main() 请将以上 Pythontext{Python}Python 程序保存为 finland.pytext{finland.py}finland.py。使用如下命令可以运行 finland.pytext{finland.py}finland.py
复制代码python3 finland.py 运行完之后,当前目录会生成一张名为 finland.pngtext{finland.png}finland.png 的图片。示例效果如下图所示

根据 Denmark 网页所提供的信息,丹麦国旗中各部分的比例如下图所示

我在别的网站上搜到了丹麦国旗中,红色、白色的具体数值 ⬇️

上文已经展示了瑞典国旗和芬兰国旗的绘制方式,我们可以用类似的方式来绘制丹麦国旗 ⬇️
在此基础上,可以写出完整的 Pythontext{Python}Python 代码 ⬇️ (trae 提供了一些帮助)
复制代码from PIL import Image # ===================== 常量定义 ===================== RED = (200, 16, 46) WHITE = (255, 255, 255)PIXEL_CNT = 20# 丹麦国旗的比例(12:4:21 / 12:4:12) LEFT_FIELD = 12 * PIXEL_CNT CROSS_WIDTH = 4 * PIXEL_CNT RIGHT_FIELD = 21 * PIXEL_CNT TOP_FIELD = 12 * PIXEL_CNT BOTTOM_FIELD = 12 * PIXEL_CNT WIDTH = LEFT_FIELD + CROSS_WIDTH + RIGHT_FIELD HEIGHT = TOP_FIELD + CROSS_WIDTH + BOTTOM_FIELD img = Image.new('RGB', (WIDTH, HEIGHT)) pixels = img.load()for x in range(WIDTH): for y in range(HEIGHT): if x >= LEFT_FIELD and x < (LEFT_FIELD + CROSS_WIDTH): pixels[x, y] = WHITE elif y >= TOP_FIELD and y < (TOP_FIELD + CROSS_WIDTH): pixels[x, y] = WHITE else: pixels[x, y] = RED def main(): img.show() img.save('denmark.png') if __name__ == "__main__": main() 请将以上 Pythontext{Python}Python 程序保存为 denmark.pytext{denmark.py}denmark.py。使用如下命令可以运行 denmark.pytext{denmark.py}denmark.py
复制代码python3 denmark.py 运行完之后,当前目录会生成一张名为 denmark.pngtext{denmark.png}denmark.png 的图片。示例效果如下图所示

根据 Norway 网页所提供的信息,挪威国旗中各部分的比例如下图所示


我在别的网站上搜到了挪威国旗中,红色、白色和蓝色的具体数值 ⬇️

上文已经展示了瑞典国旗、芬兰国旗、丹麦国旗的绘制方式,我们可以用类似的方式来绘制挪威国旗 ⬇️
在此基础上,可以写出完整的 Pythontext{Python}Python 代码 ⬇️ (trae 提供了一些帮助)
复制代码from PIL import Image # ===================== 常量定义 ===================== WHITE = (255, 255, 255) BLUE = (0, 54, 152) RED = (210, 16, 52)PIXEL_CNT = 20# 挪威国旗的比例(6:1:2:1:12 / 6:1:2:1:6) LEFT_FIELD = 6 * PIXEL_CNT BIG_CROSS_WIDTH = 4 * PIXEL_CNT SMALL_CROSS_WIDTH = 2 * PIXEL_CNT CROSS_GAP_WIDTH = 1 * PIXEL_CNT RIGHT_FIELD = 12 * PIXEL_CNT TOP_FIELD = 6 * PIXEL_CNT BOTTOM_FIELD = 6 * PIXEL_CNTWIDTH = LEFT_FIELD + BIG_CROSS_WIDTH + RIGHT_FIELD HEIGHT = TOP_FIELD + BIG_CROSS_WIDTH + BOTTOM_FIELD img = Image.new('RGB', (WIDTH, HEIGHT)) pixels = img.load()for x in range(WIDTH): for y in range(HEIGHT): if ( x >= LEFT_FIELD + CROSS_GAP_WIDTH and x < (LEFT_FIELD + CROSS_GAP_WIDTH + SMALL_CROSS_WIDTH) ): pixels[x, y] = BLUE elif ( y >= TOP_FIELD + CROSS_GAP_WIDTH and y < (TOP_FIELD + CROSS_GAP_WIDTH + SMALL_CROSS_WIDTH) ): pixels[x, y] = BLUE elif x >= LEFT_FIELD and x < (LEFT_FIELD + BIG_CROSS_WIDTH): pixels[x, y] = WHITE elif y >= TOP_FIELD and y < (TOP_FIELD + BIG_CROSS_WIDTH): pixels[x, y] = WHITE else: pixels[x, y] = RED def main(): img.show() img.save('norway.png') if __name__ == "__main__": main() 请将以上 Pythontext{Python}Python 程序保存为 norway.pytext{norway.py}norway.py。使用如下命令可以运行 norway.pytext{norway.py}norway.py
复制代码python3 norway.py 运行完之后,当前目录会生成一张名为 norway.pngtext{norway.png}norway.png 的图片。示例效果如下图所示

根据 Iceland 网页所提供的信息,冰岛国旗中各部分的比例如下图所示

我在别的网站上搜到了挪威国旗中,红色、白色和蓝色的具体数值 ⬇️

上文已经展示了挪威国旗的绘制方式,我们可以用类似的方式来绘制冰岛国旗 ⬇️
在此基础上,可以写出完整的 Pythontext{Python}Python 代码 ⬇️ (trae 提供了一些帮助)
复制代码from PIL import Image # ===================== 常量定义 ===================== WHITE = (255, 255, 255) BLUE = (2, 82, 156) RED = (220, 30, 53) PIXEL_CNT = 20# 冰岛国旗的比例(7:1:2:1:14 / 7:1:2:1:7) LEFT_FIELD = 7 * PIXEL_CNT BIG_CROSS_WIDTH = 4 * PIXEL_CNT SMALL_CROSS_WIDTH = 2 * PIXEL_CNT CROSS_GAP_WIDTH = 1 * PIXEL_CNT RIGHT_FIELD = 14 * PIXEL_CNT TOP_FIELD = 7 * PIXEL_CNT BOTTOM_FIELD = 7 * PIXEL_CNTWIDTH = LEFT_FIELD + BIG_CROSS_WIDTH + RIGHT_FIELD HEIGHT = TOP_FIELD + BIG_CROSS_WIDTH + BOTTOM_FIELD img = Image.new('RGB', (WIDTH, HEIGHT)) pixels = img.load()for x in range(WIDTH): for y in range(HEIGHT): if ( x >= LEFT_FIELD + CROSS_GAP_WIDTH and x < (LEFT_FIELD + CROSS_GAP_WIDTH + SMALL_CROSS_WIDTH) ): pixels[x, y] = RED elif ( y >= TOP_FIELD + CROSS_GAP_WIDTH and y < (TOP_FIELD + CROSS_GAP_WIDTH + SMALL_CROSS_WIDTH) ): pixels[x, y] = RED elif x >= LEFT_FIELD and x < (LEFT_FIELD + BIG_CROSS_WIDTH): pixels[x, y] = WHITE elif y >= TOP_FIELD and y < (TOP_FIELD + BIG_CROSS_WIDTH): pixels[x, y] = WHITE else: pixels[x, y] = BLUE def main(): img.show() img.save('iceland.png') if __name__ == "__main__": main() 请将以上 Pythontext{Python}Python 程序保存为 iceland.pytext{iceland.py}iceland.py。使用如下命令可以运行 iceland.pytext{iceland.py}iceland.py
复制代码python3 iceland.py 运行完之后,当前目录会生成一张名为 iceland.pngtext{iceland.png}iceland.png 的图片。示例效果如下图所示

实际使用时,建议结合项目规模、依赖环境和团队习惯做取舍;先保证流程清晰和结果可验证,再逐步优化细节。
拼多多海外专营店是正品吗?拼多多海外专营店是正品吗可靠吗
【黄啊码】省下美工钱,抢到搜索位,这个电商作图工具真香
从 Vite 空项目到 AIGC 图片工作台:我如何打通生图、任务轮询、生成库与 Canvas 动态特效实战解析
07 | 把字段与指标同步到 Qdrant(生成阶段)
火山引擎混合云 veStack 智算平台 Day0 适配 Kimi K3
我们把 26 个接口自动化场景接进了 Agent,效果真是没想到!!