0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

画像の出力名は最後の拡張子だけを置き換える

0
Posted at

JPEGの出力名を組み立てるとき、scan.final.heic の途中のドットは残します。最初の要素を取る split(".")[0] では final が消えるので、最後のドットで名前と拡張子を分けます。

ここで扱うのは File.name のようなファイル名です。MDNでは、File.name にパスは含まれないと説明されています。次の関数もパスやURLを解析せず、名前だけを受け取ります。

function jpegName(name) {
  if (typeof name !== "string" || name.length === 0) {
    return "image.jpg";
  }
  const dot = name.lastIndexOf(".");
  const stem = dot > 0 ? name.slice(0, dot) : name;
  return `${stem}.jpg`;
}

拡張子の区切りを dot > 0 としたため、先頭のドットは残ります。.photo の出力は .photo.jpg です。photo と photo. は photo.jpg になり、空文字や文字列でない値には image.jpg を返します。

Node.jsの assert.equal で、途中のドット、大文字の拡張子、拡張子なし、先頭のドット、末尾のドット、空文字、null、日本語名、既存の .jpg を含む9ケースを確認しました。

名前を生成しても画像の内容は変わりません。この関数はHEICをデコードせず、JPEGへのエンコードも行いません。実際にJPEGで生成した出力に使い、入力の File と出力画像を分けて管理します。

同名ファイルの扱いは保存処理で決めます。複数の入力が同じ出力名になるなら、識別子を加えるなどの衝突対策が必要です。ディレクトリやURLを扱う場合も、別の処理として用意します。

参考:MDN File.name

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?