-->

2021年09月

SVGをPNGに変換

macOSのターミナルでSVGをPNGに変換する。

Inkspace、ImageMagick、qlmanage(デフォルトで入っている)のどれかを使う方法がある。

glmanange

デフォルトで入っているのでなにかインストールしなくても使える。

$ qlmanage -t -s 1024 -o . hoge.svg

カレントディレクトリにhoge.svg.pngが出力される。

オプションの説明

  • -t サムネイルを用意する。
  • -s イメージのサイズ(幅をピクセルで指定)
  • -o 出力ディレクトリを指定

QuickLookのサムネイルを表示する機能っぽいのでサイズを指定しなくても出力されるが、かなり小さい画像にある。

Inkspace

Inkspqceをインストールしておく。Applicationsにインストールしたものとして書いとく。試してないけどmacOS以外でも同じようにすれば変換できるんじゃなかろうか。

$ /Applications/Inkscape.app/Contents/MacOS/inkscape -b white -w 1024 -p hoge.svg -o hoge.png

hoge.svgをhoge.pngに変換される。

オプションの説明

  • -b 背景色の指定。指定しないと透明になるようだ。
  • -w イメージのサイズ(幅をピクセル値で指定)
  • -p 入力ファイル(svg)
  • -o 出力ファイル(png)

-wオプションは省略可能。qlmanageと違っていい感じのサイズで出力される。(SVGファイルによってはいい感じじゃない場合があるかも)

ImageMagick

ImageMagickをインストールしておく。(うちはbrewを使ってインストールしたと思う)

$ convert -font ~/Library/Fonts/ipaexm.ttf hoge.svg hoge.png

hoge.svgをhoge.pngに変換される。

オプションの説明

  • -font フォントファイルを指定する。例ではIPAフォントを指定してる。省略もできるが漢字が描画されなかった。

ImageMagickの場合、文字列を縦書きしてる場合や何が原因かよくわからない(じっくり調べてないだけだけど)けど、ちゃんと描画できてないPNGができたりしたんでInkspaceかqlmanageを使うのが良さそうだった。


このエントリーをはてなブックマークに追加

ファイル一覧を取得してみる。glob.glob()を使うと取得できる。
ついでにos.path.abspath()で絶対パスにしてみる。

#!/usr/bin/env python3
import glob
import os

# カレントディレクトリのファイル一覧を取得
flist = glob.glob("./*")
# そして表示
for f in flist:
    print(f)

# os.path.abspathで絶対パスを取得して
# 表示
for f in flist:
    print(os.path.abspath(f))

このエントリーをはてなブックマークに追加

csvファイルを読み込んでみる。ついでにタブ区切りのcsvファイル(csvと言わないか)を読み込んでみる。

csvファイルを用意する。test1.csvは普通(?)のcsvファイル。test2.csvはタブ区切りのファイル。

test1.csv

"hgoe",234,hogehoge
"hoge2",345,hogehoge2

test2.csv

hgoe	234	hogehoge
hoge2	345	hogehoge2

コードは、次のようになる。

#!/usr/bin/env python3
import csv

# CSVを読み込む。 (1)
with open("test1.csv") as f:
    csv_reader = csv.reader(f)
    for row in csv_reader:
        print(row)
# ['hgoe', '234', 'hogehoge']
# ['hoge2', '345', 'hogehoge2']




# 2次元配列(リストのリスト)にしてみる。 (2)
with open("test1.csv") as f:
    csv_reader = csv.reader(f)
    datas = [row for row in csv_reader]
print(datas)
# [['hgoe', '234', 'hogehoge'], ['hoge2', '345', 'hogehoge2']]

print(datas[1][2])  # 1行目の2カラム目なんで"hogehoge2"が表示される。(行目、カラム目とも0始まり)


# タブ区切りのCSV(CSVとは言わないと思う)を読んでみる
with open("test2.csv") as f:
    csv_reader = csv.reader(f, delimiter='\t')
    for row in csv_reader:
        print(row)
# ['hgoe', '234', 'hogehoge']
# ['hoge2', '345', 'hogehoge2']

  • (1)は、ファイルをオープンしてcsv.readerで1行ずつ配列にしている。
  • (2)は、2次元配列(リストのリスト)にしている。
  • (3)は、デリミタにタブを指定してタブ区切りで読み込んでいる。

このエントリーをはてなブックマークに追加

URLの結合とか調べてみた。urllibモジュールのurljoinを使って行う。

#!/usr/bin/env python3

import urllib.parse

# ↓ http://hoge.com/index.html?abc=123 と表示される (1)
print(urllib.parse.urljoin("http://hoge.com", "index.html?abc=123"))

# ↓ http://hoge2.com/hogehoge.html と表示される (2)
print(urllib.parse.urljoin("http://hoge.com", "http://hoge2.com/hogehoge.html"))

# URLを解析してみる (3)
url = urllib.parse.urlparse("http://hoge.com:8080/index.html?abc=123")
print(url)              # ParseResult(scheme='http', netloc='hoge.com:8080', path='/index.html', params='', query='abc=123', fragment='') と表示される
print(url.netloc)       # hoge.com:8080 と表示される。
  • (1)は、まー普通につないてみてる。
  • (2)は、渡されるURLが相対的なURLか絶対的なURLかわからない場合を想定して絶対URLが渡された場合を想定してる。2つ目の引数に絶対URLを渡したら、2つ目の引数のURLがそのまま帰ってくるのが確認できた。
  • (3)は、試しにURLを解析(分解)させてみた。urlparseを使う。表示結果のように分解される。

このエントリーをはてなブックマークに追加

ICUでUTF-8の文字列を1文字ごとに分割する - Qiita

なーるほど。

「BreakIterator(ubrk.h)を使って書記素を取得する」ってので見た目1文字づつ取れるのね。

このエントリーをはてなブックマークに追加

↑このページのトップヘ