くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

文字列

Python 画像データ⇔文字列にする

Pythonで画像データのバイナリを文字列として取得したり、

逆にバイナリの文字列から画像データを起こしたりしたい場合。

Pillowを使用。

import io
from PIL import Image

#バイナリにしたい画像を読み込み
tmpimg = Image.open("./imgs/-.png")
with io.BytesIO() as output:
    tmpimg.save(output,format="PNG")
    contents = output.getvalue()#バイナリ取得
    print(contents)#表示
    tmpimg2 = Image.open(io.BytesIO(contents))#バイナリから画像に変換
    tmpimg2.save('image_from_str.png')

#バイナリ文字列としてやる場合はこんな感じ
imgbytes_str = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x0c\x00\x00\x00\x0c\x01\x03\x00\x00\x00l\xbb\xce\xa4\x00\x00\x00\x06PLTE\x00\x00\x00\xff\xff\xff\xa5\xd9\x9f\xdd\x00\x00\x00\x13IDATx\x9cc\xf8\xfc\x81\x01\x8e\x8c\r\x10\x08I\x1c\x00+\xcd\x10\xa5\xa0\xa1\xbf,\x00\x00\x00\x00IEND\xaeB`\x82'
img_from_str = Image.open(io.BytesIO(imgbytes_str))
img_from_str.save('image_from_str2.png')

C# 文字列から日付(DateTime)への変換色々

タイトル通り。ど忘れすることが多い。特にカルチャ指定。

DateTime parsedDate;
string pattern = "";
string dateVal = "";

//いつもの
dateVal = "2016/11/12";//←とか→"2016-11-12"
pattern = "yyyy/MM/dd";//←とか→"yyyy-MM-dd"
if (DateTime.TryParseExact(dateVal, pattern, null, DateTimeStyles.None, out parsedDate))
{
    Console.WriteLine(parsedDate);
}
//カルチャ指定
dateVal = "01/Jan/2017:12:10:22";//Apacheはコレ
pattern = "dd/MMM/yyyy:HH:mm:ss";
//カルチャは「using System.Globalization;」入れないと使えない
CultureInfo provider = new CultureInfo("en-US");//和風は⇒new CultureInfo("ja-JP");
if (DateTime.TryParseExact(dateVal, pattern, provider, DateTimeStyles.None, out parsedDate))
{
    Console.WriteLine(parsedDate);
}
//オマケ:DateTimeを文字列変換で書式指定
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"));
Console.WriteLine(DateTime.Now.ToString("yyyy年MMMMdd日 HH:mm:ss:fff"));

サーバのアクセスログを独自に解析したい時とか、アクセス日時の時間をDateTimeにしたいので ログの書式に合わせて変換しないといけないので結構使う。

書式指定の内容はココ参照で。

問合せ