メインコンテンツへスキップ

20年前の写真をスキャンして高解像度化(Topaz Photo AI)

20年以上前に撮影したプリントしかない写真をデータ化したが、スキャンしただけでは画質的に厳しかったためTopaz Photo AIとPixelmator Proを使って高解像度化した。

写真のスキャン
#

Scan Snap iX1500の最高画質で写真をスキャンしてデータ化した。スマホやPCで参照する分には問題ないが、プロジェクターで投影するため解像感が欲しいところ。

Image from Gyazo

Topaz Photo AIで高解像度化
#

  • 4倍へアップスケール
  • ノイズ除去、シャープ化、顔の補正、ライティング修正、色補正などてんこ盛り指定

これぐらいのサイズだとわかりにくいが、明らかに解像感が増し大画面へ写しても問題なさそうだ。ただ、色調があまり好みでなかった。

Image from Gyazo

Pixelmator Proで色補正
#

カラー調整でモダンフィルムのプリセットを選んだ(だけ)

Image from Gyazo
Topaz Photo AIで解像度を向上するのにしても、Pixelmator Proで色味を変えるにしても、細かくいくつものパラメタを指定する必要はなく、機能を選ぶだけでこれぐらいの編集ができてしまうんだから良い時代だな。

関連記事

「写真」アプリで検索した写真の撮影日周辺の写真を確認する

[iPad Workers|https://podcasts.apple.com/jp/podcast/ipad-workers/id1567317147] の #113 で紹介されていた写真アプリの便利な小技が、まさに自分が欲していたものだった。 iPhoneの「写真」アプリで検索した写真の撮影日周辺の写真を参照したいことがあるが、その際、撮影日を確認してからカメラロールに戻り、その近辺の写真を探していたが、この手順がちょっと楽になる。 検索した写真の下のiアイコンをタップし、 すべての写真に表示をタップすれば… 撮影日時近辺のカメラロールが表示される。これは便利。 ただ、Podcastでも言及されていたが、なぜか Macの「写真」アプリにはすべての写真に表示がなく同じことをするための手段がわからない…と思っていたが、いま発見した。 検索した写真を右クリックすると表示されるメニューに"すべての写真”に表示があるので、それを選択すれば同じことができる。

Blueskyのカスタムフィードを作成する

SkyFeedのFeed Builderを使ってカスタムフィードをつくる - Blueskyを参考にBlueskyのカスタムフィードを作成してみた。ざっくりとした手順としては、 Blueskyでアプリケーションパスワードを生成する SkyFeedへアプリケーションパスワードを使用してログイン Feed Builder - Create your first feed Input Remove RegEX Sort Limit Stash+Popという種別のブロックを組み合わせて検索条件を作成する 名前を付けてPublishする という感じ。作成したカスタムフィードはこちら。 横浜FCの話題 - Bluesky

Amazonから書誌情報をTextwellへ取り込むブックマークレット

bibinfo-exporter/script.js at main · goryugocast/bibinfo-exporterを参考にAmazonから書誌情報をへ取り込むブックマークレットを作成した。 直接Obsidianに取り込むのは自分の運用に合わないためTextwellへ追記するように。 こちらは書籍専用で、著者名や出版社、出版日などを取り込む。 Amazonの書誌情報をTextwellの追記するブックマークレット javascript: (() => { const dest_path = 'notes'; //ファイルを格納するパス const amazon_id = 'namaraiicom-22'; // アフィリエイトID let p = document.getElementById("productTitle"); //書籍のタイトルの処理 p = p ? p : document.getElementById("ebooksProductTitle"); const title = p.innerText.trim(); let asin = document.getElementById('ASIN'); //ASIN番号の処理 const a = asin ? asin.value : document.getElementsByName('ASIN.0')[0].value; const url = `https://www.amazon.co.jp/exec/obidos/ASIN/${a}/${amazon_id}/`; const link = `[${title}](${url})`; let image = document.getElementById("imgTagWrapperId"); //書影の処理 image = image ? image : document.getElementById("ebooksImgBlkFront"); const imageurl = image.querySelector("img").getAttribute("src"); const c = document.getElementsByClassName('author'); const pub = []; const ct_list = []; // ctの各要素を保存する配列を新たに定義 for (let g = 0; g < c.length; g++) { const at = c[g].innerText.replace(/\r?\n/g, '').replace(/,/,''); const pu = at.match(/\(.+\)/); const ct = at.replace(/\(.+\)/,'').replace(/ /g,''); ct_list.push(ct); // ctを配列に追加 pub.push(`${pu} [[${ct}]]`); } const author = pub.join(' '); let h1title = `『${title}』`; h1title = h1title.replace(/[\\/:*?"<>|.]/g, char => ({ ':': ':', '\\': '\', '/': '/', '?': '?', '*': '*', '"': '”', '<': '<', '>': '>', '|': '|', '.': '.' }[char])); const mdimage = `[![|100](${imageurl})](${url})`; // 登録情報欄を取得 let detail = document.getElementById('detailBullets_feature_div'); if (!detail) { const subdoc = document.getElementById("product-description-iframe").contentWindow.document; detail = subdoc.getElementById("detailBullets_feature_div"); } const detailtext = detail.innerText; const pubdata = detailtext.split(/\n/); pubdata[2] = pubdata[2]?.slice(10); // 出版社 const date = new Date().toLocaleDateString('sv-SE'); const lines = `---%0D%0Atitle: "${h1title}"%0D%0Adate%3A%20${date}%0D%0Aupdated%3A%20${date}%0D%0Andl%3A%0D%0Atags%3A%20読書メモ%0D%0Adraft%3A%20true%0D%0A---%0D%0A${mdimage}%0D%0A-%20${link}%0D%0A-%20${author}%0d%0A-%20${pubdata[2]}%0D%0A%0D%0A%23%23 関連・思い出した本 %0d%0A%23%23 読書メモ%0d%0A`; const app = `textwell:///add?text=${lines}`; window.open(app); })(); こちらは一般的な商品の画像と商品名を取り込む。 Amazon商品の商品名と画像へのリンクをTextwellに追加するブックマークレット javascript: (() => { const dest_path = "notes"; //ファイルを格納するパス const amazon_id = "namaraiicom-22"; // アフィリエイトID let p = document.getElementById("productTitle") || document.getElementById("ebooksProductTitle"); //書籍のタイトルの処理 const title = p.innerText.trim(); const asinElement = document.getElementById('ASIN') || document.getElementsByName('ASIN.0')[0]; //ASIN番号の処理 const a = asinElement.value; const url = `https://www.amazon.co.jp/exec/obidos/ASIN/${a}/${amazon_id}/`; const link = `[${title}](${url})`; const image = document.getElementById("landingImage"); const imageurl = image.getAttribute("src"); // 自分が必要なパラメータに変換 let h1title = title.replace(/[\\/:*?"<>|.]/g, char => ({ ':': ':', '\\': '\', '/': '/', '?': '?', '*': '*', '"': '”', '<': '<', '>': '>', '|': '|', '.': '.' }[char])); const mdimage = `[![|100](${imageurl})](${url})`; const lines = `${mdimage}%0D%0A%0D%0A${link}%0D%0A`; const app = `textwell:///add?text=${lines}`; window.open(app); })();

アウェイ コンサドーレ札幌戦へ遠征してきた

先週末、コンサドーレ札幌とのアウェイゲームのため札幌へ行ってきた。 スタジアム近くで見かけたクマ注意の看板。今年はあちこちで被害がでているが、こんなところにまで来たのかとちょっと驚いた。 札幌はもう紅葉が始まっていて、スタジアム周辺の木々も色付いていた。 マッチデープログラムや監督紹介の際の拍手に札幌サポーターの深いヨモさん愛を感じた。いまでも良い関係のようでいいですね。 また、スタッフの方々の声掛けやコミュニケーション全般の感じが素晴らしく、ホスピタリティを感じさせられるものだった。 スタグルに期待し何も用意せずにスタジアムへ向ったが、座席近くの売店はチェーン系(ケンタッキー、銀だこ、モスバーガーなど)がほとんどで残念な感じだった(いつでも食べられるという意味で)せっかくだったら地元のものを食べたかったところ。 試合については記さないことにする。 夜はすすきの海乃四季というお店で残念会。 昼間のできごとなんてサッポロ・ザ・パーフェクト・クラシックを飲んだら忘れてしまった。 どの料理も美味しかったし、接客もていねいで良いお店だった。

📔 Macの「メモ」をMarkdown・HTMLでエクスポートする方法

以下のエントリにも書いた通り、Apple謹製の「メモ」アプリは継続的に改善されており、自分の用途を考えると機能的な不満はない。 🗒️ メモ管理の現状 - namaraii.com ただ、「メモ」アプリにはPDF形式でしかデータをエクスポートできないという大きな問題点がある。 PDFでエクスポートできたとしても、他のメモアプリにインポートするのは困難であり事実上のロックインだ。 とは言え、なんとかエクスポートする方法はないか調べたところ、Exporterというアプリがあった。このアプリは、 フォルダ構造を維持してMarkdownまたはHTMLでエクスポート可能 作成日、更新日を維持(Markdownの場合、FrontMatterへ出力可能) jpeg、png、gif、tiff、bmp、pdf、ics、m4a、mov、mp3の添付ファイルの書き出しに対応 という優れもので、無料で全ノートをエクスポートすることができる。 課金するとフィルタビューという機能が提供され、選択したノートブックのみエクスポートできるようだ。 全体のエクスポートはそれなりに時間がかかるので、頻繁にバックアップを取得したい人は課金すると良いかも。 蛇足 # エクスポート方法を調べる過程で知ったが、メモアプリのデータはSQlite3で管理しているらしい。 ~/Library/Group Containers/group.com.apple.notes/NoteStore.sqliteにあるファイルをワークエリアへコピーしてsqlite3コマンドでテーブル一覧を参照できた。 $ sqlite3 NoteStore.sqlite SQLite version 3.39.5 2022-10-14 20:58:05 Enter ".help" for usage hints. sqlite> .tables ACHANGE ZICINVITATION Z_METADATA ATRANSACTION ZICLOCATION Z_MODELCACHE ATRANSACTIONSTRING ZICNOTEDATA Z_PRIMARYKEY ZICCLOUDSTATE ZICNOTEPARTICIPANT ZICCLOUDSYNCINGOBJECT ZICSERVERCHANGETOKEN sqlite> select * from ZICNOTEDATA LIMIT 1; 10917|18|1|107431||| メモアプリのデータへアクセスするAPIが公開されたりしたらありがたいが、そんなことはしないだろうな。

〰️ USB Type-Cの複雑さ

iPhone 15でLightningからUSB Type-Cへ変更される記念?で、なんとなくしか理解していないUSB Type-Cの仕様についてまとめてみた。 USB Type-Cとは # USB Type-Cは、物理的なコネクタの形状を指すものである。その背後にあるデータ転送や電力供給の仕様は、USB Type-Cの形状だけでは特定できない。 USBの仕様 # 仕様 データ転送速度 注意点 USB 2.0 最大480 Mbps 新しいデバイスとの互換性が必要な場合には注意が必要 USB 3.2 Gen 1 最大5 Gbps USB 3.2 Gen 2 最大10 Gbps USB 3.2 Gen 2x2 最大20 Gbps USB4 最大40 Gbps Thunderbolt 3との互換性があるが、すべてのUSB4デバイスやケーブルがThunderbolt 3と互換性があるわけではない USB Power Delivery (USB PD) # USB Type-Cコネクタを使用するデバイス間での高出力の電力供給を可能にするもので最大100W (20V@5A)の電力供給が可能。