スクリプトで実行している内容
- 画像の新規作成 7680×4320
- 矩形選択塗りつぶし
- ピクセル単位で塗りつぶし
- 選択ガウスぼかし
- 縮小・拡大(CUBIC)
- PNG形式で画像を保存
結果
プロセッサ | 新規作成 | 矩形塗 | ピクセル塗 | ガウスぼかし | 縮小拡大 | PNG保存 | トータル時間(秒) |
---|---|---|---|---|---|---|---|
Intel Celeron 3965U(Win10) | 0.34 | 0.35 | 2.40 | 3.64 | 17.06 | 3.06 | 26.50 |
Intel Celeron N5105(Win11) | 0.30 | 0.43 | 1.92 | 0.89 | 5.70 | 3.2 | 12.00 |
AMD Ryzen5 5600X(1スレッドSMT Off)(Win11)RTX3070 | 0.17 | 0.37 | 1.19 | 1.04 | 5.63 | 1.38 | 9.40 |
AMD Ryzen5 5600X(1スレッド)(Win11)RTX3070 | 0.15 | 0.33 | 1.12 | 1.03 | 5.67 | 1.37 | 9.34 |
Intel Core i3 9100F(Ubuntu)RTX3060 | 0.27 | 0.47 | 1.68 | 0.63 | 3.05 | 1.96 | 7.58 | Intel Celeron G6900(2スレッド)(Win11) GTX1630 | 0.13 | 0.44 | 1.47 | 0.76 | 3.34 | 1.61 | 7.32 |
AMD Ryzen5 5600X(12スレッド)(Win11)RTX3070 | 0.12 | 0.39 | 1.46 | 0.34 | 3.19 | 1.57 | 6.68 | Intel Pentium Gold G7400(4スレッド)(Win11) GTX1630 | 0.16 | 0.49 | 1.34 | 0.64 | 2.27 | 1.50 | 6.32 |
AMD Ryzen5 5600X(Ubuntu)RTX3070 | 0.14 | 0.41 | 1.81 | 0.38 | 1.68 | 1.88 | 5.88 | AMD Ryzen5 5600X(WSL-Ubuntu)RTX3070 | 0.06 | 0.82 | 1.82 | 0.33 | 1.51 | 1.82 | 5.53 |
AMD Ryzen5 5600G(Win11)(Mem16GBVRAM16GB) | 0.13 | 0.30 | 1.20 | 0.49 | 1.63 | 1.50 | 4.95 |
AMD Ryzen7 5700X(Win11)RTX4070 | 0.15 | 0.44 | 1.47 | 0.29 | 1.39 | 1.41 | 4.7 |
AMD Ryzen5 5600G(Ubuntu)(Mem16GBVRAM16GB) | 0.05 | 0.56 | 1.40 | 0.24 | 1.44 | 1.54 | 4.67 |
AMD Ryzen5 5600X(6スレッドSMT Off)(Win11)RTX3070 | 0.06 | 0.37 | 1.32 | 0.24 | 1.52 | 1.34 | 4.49 |
AMD Ryzen7 5700X(8スレッドSMT Off)(Win11)RTX4070 | 0.16 | 0.39 | 1.26 | 0.21 | 1.31 | 1.42 | 4.38 |
AMD Ryzen5 7600(Ubuntu)RTX3060 | 0.09 | 0.59 | 1.15 | 0.24 | 1.03 | 1.13 | 3.66 |
スクリプトの作りに問題があるのかもしれませんが、以前からUbuntu上のGIMPの動きがキビキビしていると感じていたので個人的には納得の結果。
これの要因がIntel Core i3が速いのかOSがUbuntuのおかげなのか気になるところ。個人的には後者だとおもうのですが、そのうち確認してみたいと思います。
RyzenのSMTを無効化したらGIMPの動作が良くなった。
AMDのRyzen5 5600Xを搭載したPCでWindows版のGIMP2.10を使っているのですが、重いフィルターや大き目の画像の縮小などをすると、フリーズすることがありました。解決策としては、GIMPのメニュー→「編集」→「設定」→「...
スクリプト
#!/usr/bin/env python
# coding: utf8
from gimpfu import *
from array import array
from time import time
import os, glob
import platform, tempfile
def plugin_main():
msg = ""
msg = "Speed Test {0} {1}".format(platform.system(), platform.processor())
ver = gimp.version
msg += "\n" + "GIMP {0}.{1}.{2}".format(ver[0], ver[1], ver[2])
start1 = time()
# 新規作成
width = 7680
height = 4320
image = pdb.gimp_image_new(width, height, 0)
layer = pdb.gimp_layer_new(image, width, height, 1, "Background", 100, 0)
image.add_layer(layer)
color = (255, 255, 255, 1.0)
pdb.gimp_context_set_foreground(color)
pdb.gimp_drawable_edit_fill(layer, 0)
disp = pdb.gimp_display_new(image)
start2 = time()
msg += "\n" + "新規作成:{0}".format(start2-start1)
# 矩形選択塗りつぶし
color = (255, 0, 0, 1.0)
pdb.gimp_context_set_foreground(color)
pdb.gimp_image_select_rectangle(image, 0, 1920, 1080, 1920, 1080)
pdb.gimp_drawable_edit_fill(layer, 0)
pdb.gimp_selection_none(image)
start3 = time()
msg += "\n" + "矩形選択塗潰し:{0}".format(start3-start2)
pdb.gimp_image_select_rectangle(image, 0, 0, 0, 1920, 1080)
# ピクセル単位塗りつぶし
w = 1920
h = 1080
src_rgn = layer.get_pixel_rgn(0, 0, w, h, False, False)
dst_rgn = layer.get_pixel_rgn(0, 0, w, h, False, True)
src_pixels = array("B", src_rgn[0:w, 0:h])
pixel_size = len(src_rgn[0,0])
dest_pixels = array("B", "\x00" * (w * h * pixel_size))
# 範囲選択水平ループ
for x in range(0, w):
# 範囲選択垂直ループ
for y in range(0, h):
pos = (x + w * y) * pixel_size
val = src_pixels[pos: pos + pixel_size]
val[0] = 0
val[1] = 0
val[2] = 255
val[3] = 255
dest_pixels[pos : pos + pixel_size] = val
dst_rgn[0:w, 0:h] = dest_pixels.tostring()
layer.flush()
layer.merge_shadow()
layer.update(0, 0, width, height)
pdb.gimp_selection_none(image)
start3 = time()
msg += "\n" + "ピクセル塗潰し:{0}".format(start3-start2)
total_time = time() - start1
# 選択ガウスぼかし
pdb.gimp_image_select_rectangle(image, 0, 960, 540, 1920, 1080)
pdb.plug_in_sel_gauss(image, image.active_drawable, 5.0, 51)
pdb.gimp_selection_none(image)
start4 = time()
msg += "\n" + "選択ガウスぼかし:{0}".format(start4-start3)
# 縮小拡大
pdb.gimp_image_scale_full(image, 1920, 1080, 2)
pdb.gimp_image_scale_full(image, 7680, 4320, 2)
start5 = time()
msg += "\n" + "縮小拡大:{0}".format(start5-start4)
# PNG保存
tempfile.gettempdir()
d = os.path.join(tempfile.gettempdir(), "temp.png")
pdb.gimp_file_save(image, image.active_layer, d, d)
start6 = time()
msg += "\n" + "PNG保存:{0}".format(start6-start5)
total_time = time() - start1
msg += "\n" + "トータル:{0}".format(total_time)
gimp.message(msg)
os.remove(d)
#pdb.gimp_display_delete(disp)
return
register("SpeedTest", "", "", "", "", "",
"SpeedTest",
"",
[],
[],
plugin_main,
menu = "<Image>/Filters")
main()
コメント