slackを使っていると、文字を強調したくなることがあります。
絵文字や画像を使ったりしますが
もっとインパクトをもたせたい、チャンネルを開いた瞬間に目に入るようにしたいと思ったので
文字列を画像化するhubotスクリプト作成してみました。
ImageMagicとfontのインストール
- まずはImageMagicとfontのインストール (CentOS/AmazonLinuxの場合です、他は適度に設定ファイルの場所を読みかえてください)
# yum install ImageMagick ipa-gothic-fonts
- ImageMagicのLABEL読み取りを許可
- /etc/ImageMagick/policy.xml の LABELの権限をreadに変更
<policy domain="coder" rights="read" pattern="LABEL" />
サイズとフォントを指定して画像生成
# convert -pointsize $SIZE -font /usr/share/fonts/ipa-gothic/ipag.ttf "ここに画像化したい文字" /tmp/str_img.png
hubot スクリプト化
- 最初は黒だけだったけど、色をランダムで変えた方が楽しいので適当にランダムで色変更と文字サイズを1-5くらい追加してhubot化
# Description:
# str_img
# hubot str_img string [size 1-5]
#
spcolor = [
'magenta',
'orange',
'LimeGreen',
'blue',
'purple',
'OrangeRed',
'SkyBlue',
'LightBlue',
'Turquoise',
'gold'
]
exec = require('child_process').exec
fs = require('fs')
module.exports = (robot) ->
robot.respond /str_img (.*)/i, (msg) ->
sizeMatch = msg.match[1].match /\s([1-5])$/
color = spcolor[Math.floor(Math.random() * spcolor.length)]
if sizeMatch?
str = msg.match[1].slice(0, -2)
size = sizeMatch[1] * 50
else
str = msg.match[1]
size = 50
exec "convert -pointsize #{size} -font /usr/share/fonts/ipa-gothic/ipag.ttf label:#{str} /tmp/str_img.png"
filename = '/tmp/str_img.png'
channel = msg.message.room
stats = fs.statSync(filename)
if stats.size <= 100000
exec "curl -F file=@#{filename} -F channels=#{channel} -F token=#{process.env.HUBOT_SLACK_TOKEN} https://slack.com/api/files.upload", (err, stdout, stderr) ->
console.log(stdout)
console.log(stderr)
else
msg.send "画像サイズが100Kbyteを超過してます、文字数を少なくするかサイズ指定を下げてください"
使い方
- slack上で hubot str_img テスト
- 文字を大きくする場合は hubot str_img テスト 2
- 画像サイズは1から5の間で指定、画像が大きすぎるとslackに投稿失敗します
- 画像uploadの制限が1Mybteかと思ったら100Kbyteだった、上げることができるかもしれないけど100Kbyteで十分かなとも思う
こんなかんじ
- やっぱりフォントをゴニョゴニョフォントの出し分けもして、結果完成!(フォントゴニョゴニョは割愛)