Techioz Blog

Rails MiniMagick 情報: 値を取得するには?

概要

画像から黒いバーを削除したいのですが、うまく機能する bash スクリプトを見つけました

margin=$(convert input.jpg -fuzz 10% -set page "%[@]" -format "%[fx:h-page.height-page.y]" info:)
magick input.jpg -gravity South -chop 0x$margin -gravity North -chop 0x$margin output.jpg
convert input.jpg -fuzz 10% -set page "%[@]" -format "%[fx:h-page.height-page.y]" info:

たとえば 140 を返します。これは黒いバーのピクセル サイズです しかし、Rubyインターフェイスを使用してこの値を設定することはできません

convert = MiniMagick::Tool::Convert.new
convert << "test.jpg"
convert.fuzz("10%")
convert.set('page "%[@]"')
convert.format("%[fx:h-page.height-page.y]")
convert.call

このコマンドは戻り値を返します

test.jpg[0] JPEG 1920x1080 1920x1080+0+0 8-bit sRGB 57180B 0.010u 0:00.018\n%[fx:h-page.height-page.y][1] JPEG 1920x1080 1920x1080+0+0 8-bit sRGB 47180B 0.010u 0:00.009

バックマージンの値を取得するにはどうすればよいですか?この文字列には 140 が含まれていません

電話したら

convert.command.join ' '

分かりました

convert test.jpg -fuzz 10% -set page %[@] -format %[fx:h-page.height-page.y]

解決策

convert = MiniMagick::Tool::Convert.new
convert << "test.jpg"
convert.fuzz("10%")
convert.set 'page', '%[@]'
convert.format '%[fx:h-page.height-page.y]'
convert << "info:"
convert.call

これにより正しい値が返されます。引数の配置を手伝ってくれた chatgpt に感謝します