日別アーカイブ: 2019/05/05

Quick Action @ change72dpi (PyObjC)

自作アプリの件が片付いたので PyObjC Tips の続きを。
NSButton – L’Isola di Niente

NSButton だけで長くなってしまったのでコレだけで一頁にした。
3D タッチ処理がこんなに簡単だとは思わなかった、AppKit スゲェ。

それはそうと、sips がおかしい、サイズが半分の半分になるんだが。
今まで下記クイックアクションに登録したコードでイケていたのに急に何故だ?
macOS をクイックアクションで拡張 – L’Isola di Niente

スクリーンショットが必要なのに困った。
緊急で自作スクリプトを作る。

#!/usr/local/bin/python3

import sys, os
from AppKit import *
from Quartz.CoreGraphics import *

os.chdir(os.path.dirname(sys.argv[1]))
args = sys.argv[1:]

for s in args:
    name = os.path.basename(s)
    src_image = NSImage.alloc().initWithContentsOfFile_(name)
    img = NSBitmapImageRep.imageRepWithData_(src_image.TIFFRepresentation()).CGImage()
    h = CGImageGetHeight(img) // 2
    w = CGImageGetWidth(img) // 2
    ctx = CGBitmapContextCreate(None, w, h, 8, 4 * w, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast)
    CGContextDrawImage(ctx, CGRectMake(0, 0, w, h), img)
    imgref = CGBitmapContextCreateImage(ctx)
    out_image = NSImage.alloc().initWithCGImage_size_(imgref, (w, h))
    bmp = NSBitmapImageRep.imageRepWithData_(out_image.TIFFRepresentation())
    data = bmp.representationUsingType_properties_(NSBitmapImageFileTypePNG, {})
    data.writeToFile_atomically_(f'72dpi-{name}', True)

change72dpi という拡張子の無い名前にして +x パーミッション。

Comipoli で使っているコードをフルパス用に書き換えて同じ結果になるように。
クイックアクションは以前の command+shift+S でコピーを作って。

/Users/sasakima-nao/bin/change72dpi "@"

に書き換え保存。

とにかく、GUI を使うなら何をするにもフルパスが必要。
まさかのシバンまでフルパスに、いやシンボリックリンクなんだけどさすがに通った。
だからパスが通っているディレクトリに入れる必要は無いけどなんとなく。

Linux みたくフルパスを使うことのほうが珍しいにしてくれよ。
セキュリティなんて SELinux みたいなので充分だろ。