月別アーカイブ: 2023年1月

NSImage: WebP and HEIF

前回 Fedora での WebP 変換について書いたんですけど。
WebP を使いたい層は Web デザイナ、つまり macOS ユーザーが大半かと。
アプリも色々出ているけどオートメーションでサクッと変換できればなって。
ところで NSImage って WebP を扱えるのかな?

#!/usr/bin/env python3

from AppKit import *

RECT = ((0, 0), (400, 300))

class MyView(NSView):
    def initWithFrame_(self, rect):
        objc.super(MyView, self).initWithFrame_(RECT)
        return self

    def drawRect_(self, rect):
        # WebP or HEIF
        image = NSImage.alloc().initWithContentsOfFile_('gara.webp')
        #image = NSImage.alloc().initWithContentsOfFile_('panaleica.heic')
        image.drawInRect_(RECT)

class MyWindow(NSWindow):
    def init(self):
        objc.super(MyWindow, self).initWithContentRect_styleMask_backing_defer_(
            RECT,
            NSTitledWindowMask | NSClosableWindowMask |
            NSResizableWindowMask | NSMiniaturizableWindowMask,
            NSBackingStoreBuffered, False)
        self.setTitle_('WebP Test')
        self.setDelegate_(self)
        # MyView
        self.canvas = MyView.alloc().initWithFrame_(RECT)
        self.contentView().addSubview_(self.canvas)
        #
        return self

class AppDelegate(NSObject):
    def applicationDidFinishLaunching_(self, notification):
        self.mywindow = MyWindow.new().autorelease()
        self.mywindow.makeKeyAndOrderFront_(self.mywindow)

class AppMenu(NSMenu):
    def init(self):
        objc.super(AppMenu, self).init()
        item_app  = NSMenuItem.new()
        self.addItem_(item_app)
        menu_app = NSMenu.new()
        item_app.setSubmenu_(menu_app)
        # quit menu
        item_quit = NSMenuItem.new()
        item_quit.initWithTitle_action_keyEquivalent_('Quit App', 'terminate:', 'q')
        menu_app.addItem_(item_quit)
        return self

pool = NSAutoreleasePool.new()

NSApplication.sharedApplication()
NSApp.setMainMenu_(AppMenu.new())
NSApp.setDelegate_(AppDelegate.new())
NSApp.activateIgnoringOtherApps_(True)
NSApp.run()

del pool

PyObjC でごめん。

mac webp

普通に扱えるんですね、HEIF(heic) 画像でも問題なく。
後はコレを変換だ、と思ったんですけど。

NSBitmapImageFileType | Apple Developer Documentation

NSBitmapImageFileTypeWEBP なんて定義は無いんですね。
HEIF も無い、検索で簡単に見つかる手段は使えないか。
もう少し調べます。

WebP @ GNOME

Fedora 37 で今更気がついた。
WebP が Nautilus でサムネイル、及び Eye of GNOME で表示できるように。
EoG で拡張子を webp にて別名保存すると作成することさえも可能。
JPEG からでは Exif は消えてしまうけど回転情報に合わせて変換してくれる、凄い。

webp

上記が変換したもの、WebP も今は WordPress で普通にアップロードできるのね。
しかし PNG から変換したらサイズが 1/4 になって笑う。

size

heaf はライセンスの関係で GNU/Linux では今後も無理だと思う。
互換性無さすぎて実験用途にしか使っていないから別にいいけど。

#!/usr/bin/env python3

import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, Gio

class Win(Gtk.ApplicationWindow):
    '''
        WebP Test
    '''
    def __init__(self, a):
        Gtk.ApplicationWindow.__init__(self, application=a, title='GTK4')
        f = Gio.file_new_for_path('webp.webp')
        pic = Gtk.Picture(file=f)
        self.set_child(pic)

app = Gtk.Application()
app.connect('activate', lambda a: Win(a).present())
app.run()

GTK4 もデフォルトで対応済。

GdkPixbuf でも読み書きできるけどオプションが解らん。
GdkPixbuf.Pixbuf.save
書いていないし cwebp のオプションとも違うようで、お手上げ。

#!/usr/bin/env python3

'''
    Nautilus Script @ Create WebP
'''

import gi, os
gi.require_version('GdkPixbuf', '2.0')
from gi.repository import GdkPixbuf

path_array = os.environ['NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'].split('\n')
for filepath in path_array:
    try:
        pixbuf = GdkPixbuf.Pixbuf.new_from_file(filepath)
    except:
        continue
    webp_name = f'{os.path.splitext(filepath)[0]}.webp'
    pixbuf.savev(webp_name, 'webp')

とりあえず Nautilus Script を簡易で作ってみた。
ドキュメントに追記があるまでオプション無しで。
スクリーンショットの PNG から変換程度ならコレで十分だろう。

mac_img

macOS のプレビュー.app では WebP 変換の選択肢が無くて笑う。
まさか画像関連で Fedora のほうが優れている場合があったなんて。
ということで。

yamagara

ヤマガラ、トリミング無しでこのサイズいけた。
こういうのは劣化しないように JPEG のままがいいよ。
というか Exif を残さないと自分が困るもんね。

AF Target

E-M5Mark3 で今頃気がついた、これは困った。
EVF を覗いている時ははタッチパネルで AF ターゲットを動かせない。
LUMIX の時はそうやって AF ターゲット位置を決めていたんですけど。
野鳥以外では EVF を使わないので普通に可能だとずっと思っていたよ。

hakusekirei

こんなふうに三分割法の左下に移動させたいとかの場合本当に困る。
てか動かなくて焦った、何故?って目を離したら動いて事なきを得たけど。
マルチセレクターを使えなのかな、付いていないんですけど。
穏やかな五条川に鏡像が映ったハクセキレイでした。

kawarahiwa

カワラヒワの水浴び、鳥って寒く無いんだろうか?
関係ないけどカラスの行水って、カラスは綺麗好きですよね。
ヒヨドリの行水に変更すべき、あいつらの水浴びマジ一瞬。
で、こういう二羽同時に撮影したいとかの場合にも困りますね。

kogamo

コガモの雌も水浴び、いやずっと水の上にいるんだけど。
ずっとバシャバシャやっていたけどかゆかったのだろうか?

kogamo

コガモの雄は傍にてのんびり毛繕いしていました。
とても穏やかな今日の五条川でした。

しかし AF ターゲットの件は本当に困る。
タッチパネルで動かすには一度 EVF から目を離す必要がある。
それで野鳥を見失う可能性のほうが高い、今日は上手くいったけど。
もしくはターゲット設定を出して十字キー、しか手段が無いみたい。

AI ノイズリダクションが無ければ LUMIX に戻るでいいんだけど。
マルチセレクター付きな E-M1Mark3 か OM-1 を買うしか。。。。。

Histogram

今日は久々の快晴、野鳥撮影日和だ!
だからといって野鳥が都合よく出てきてくれるはずもなく。
ブログに貼れるような野鳥写真は撮れませんでした。

ところでカメラや現像アプリに付いているヒストグラム。
これっていったい何に使うんだろう?
プロの人は「おいおい。。。」だろうけど一般人はそんなだよね。
どうやら扇形にするのが理想らしい。

01

ということで試してみた、いや頑張ってみた。
iFinish を弱にして shadow を少し明るくして etc…

nadeshiko

しぶとく生き残っているセキチク(ナデシコ)で。
たしかにバランスはいいね、オリンパスらしくないような気も。

02

やっぱりこれです、青が一部ドカーンと。
過去画像も iFinish だとこんな感じが結構多かったり。

nadeshiko

でも現像するとそんなに青くない、よく解らない。
そもそも撮影時になるべく扇形になるように写せばいいんだよなって。
白トビや黒ツブレも撮影前にヒストグラムで解るし今後は活用しよう。

ついでに、macOS のスクリーンショットで今頃知ったんだけど。
外部出力のディスプレイ上で行うと 72dpi になるんだね。
(HiDPI) マークのサイズだと Retina ディスプレイ同様 144dpi に。

72dpi

つまり外部ディスプレイでスクリーンショットすれば dpi 変更無しでイケる。
と思って試したらフォントのアンチエイリアスが消えて余計汚くなるやん。
上記設定画面がソレをやった例です、ほんと何でこんな仕様なんだか。

更に command+shift+3 すると両方のスクリーンショットが生成される。
これ不便だからアクティブな画面だけにしてくれないかなぁ。

Tsugumi

今日は物凄い腹痛で目覚め午前中はトイレで死んでいました。
14 時くらいに治ったのでそれから近所で野鳥探し。
この時間からじゃなぁ、まあセキレイならいるだろう。

tsugumi

ツグミ、いやツグミなんて四月になったらアホみたく見つかるし。
なんだけど木の上にいるツグミは今しか撮影できないよなって。

tsugumi

うーん空が中途半端だな、一応晴れてはいるんだけど。
オリンパスブルーに毒されているなって。

hakusekirei

ハクセキレイは普通にいっぱいいます。
思ったけどこんな見下ろす感じで撮影すると綺麗に見えないね。

なるべく水平に撮影して背景ボケを大きめにするほうがいいみたい。
いや野鳥がそんな都合のいい位置に来てくれるはずがないんだけどさ。
写真もやはりプログラミングと同じで経験値がすべてですね。
才能やセンスなんてものはこの世に存在しないと思う。