LINK


(無償)
logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)
The Document Foundation Wiki

人気の投稿(1ヶ月間)

Ad

Ad

ラベル linux コマンド の投稿を表示しています。 すべての投稿を表示
ラベル linux コマンド の投稿を表示しています。 すべての投稿を表示

2020年4月21日火曜日

【Linux CentOS 7】jpeg画像ファイルの容量を小さくしたり位置情報等を含むメタ情報(Exif)を除去したりできるコマンドライン


スマホで撮影した画像ファイルが数メガバイトのjpegである場合、
メール添付ではサーバーに送信を許可されないことがある。
その場合、jpegファイルを品質を落す代わりに容量を小さくすればよい。

必要なパッケージのインストールから、
指定した容量へのjpegファイルの最適化を記している。


■パッケージのインストール

epelリポジトリの導入を済ませる。
# yum install epel-release.noarch

パッケージのインストール
# yum install jpegoptim
インストール:
  jpegoptim.x86_64 0:1.4.6-1.el7                                             
完了しました!
パッケージの説明を表示させた。
# yum info jpegoptim
名前                : jpegoptim
アーキテクチャー    : x86_64
バージョン          : 1.4.6
リリース            : 1.el7
容量                : 58 k
リポジトリー        : installed
提供元リポジトリー  : epel
要約                : Utility to optimize JPEG files
URL                 : http://www.kokkonen.net/tjko/projects.html
ライセンス          : GPLv2+
説明                : Jpegoptim is an utility to optimize JPEG files. Provides
                    : lossless optimization (based on optimizing the Huffman
                    : tables) and "lossy" optimization based on setting maximum
                    : quality factor.


■jpegファイルの最適化

下記、最適化のついでに、画像ファイルのメタ情報(Exif)を削除したい場合は、
--strip-exif オプションも付けると良い。

メタ情報(Exif)の表示は、後述している。


〇品質ベースで最適化する。

品質を70%まで落とす代わりに画像ファイル容量を削減する。
ロスレスではないため、最適化により画質が劣化する。

元は3.7MB程度あった写真の画像ファイルは、-m70の指定によって、1.6MB程度に小さくなった。
もちろん、画像の内容に依存すると考えられる。

$ jpegoptim -m70 IMG_20200421.jpg


メタ情報(Exif)も削除したい場合:

$ jpegoptim -m70 --strip-exif IMG_20200422_133830.jpg
IMG_20200422_133830.jpg 4608x3456 24bit N Exif  [OK] 3710264 --> 1595107 bytes (57.01%), optimized.


〇とにかく指定したファイルを300kバイト程度に最適化する。

元は4MB程度あったファイルが、キロバイト単位で指定した容量にまで減った。
ロスレスではないため、最適化により画質が劣化する。

ファイルは上書きされるので注意すること。

$ jpegoptim -S300 IMG_20200421.jpg
IMG_20200421.jpg 4608x3456 24bit N Exif  [OK] 4029446 --> 303464 bytes (92.47%), optimized.


〇ヘルプを表示
$ jpegoptim --help
jpegoptim v1.4.6  Copyright (C) 1996-2018, Timo Kokkonen
Usage: jpegoptim [options] <filenames>
  -d<path>, --dest=<path>
                    specify alternative destination directory for
                    optimized files (default is to overwrite originals)
  -f, --force       force optimization
  -h, --help        display this help and exit
  -m<quality>, --max=<quality>
                    set maximum image quality factor (disables lossless
                    optimization mode, which is by default on)
                    Valid quality values: 0 - 100
  -n, --noaction    don't really optimize files, just print results
  -S<size>, --size=<size>
                    Try to optimize file to given size (disables lossless
                    optimization mode). Target size is specified either in
                    kilo bytes (1 - n) or as percentage (1% - 99%)
  -T<threshold>, --threshold=<threshold>
                    keep old file if the gain is below a threshold (%)
  -b, --csv         print progress info in CSV format
  -o, --overwrite   overwrite target file even if it exists (meaningful
                    only when used with -d, --dest option)
  -p, --preserve    preserve file timestamps
  -P, --preserve-perms
                    preserve original file permissions by overwriting it
  -q, --quiet       quiet mode
  -t, --totals      print totals after processing all files
  -v, --verbose     enable verbose mode (positively chatty)
  -V, --version     print program version
  -s, --strip-all   strip all markers from output file
  --strip-none      do not strip any markers
  --strip-com       strip Comment markers from output file
  --strip-exif      strip Exif markers from output file
  --strip-iptc      strip IPTC/Photoshop (APP13) markers from output file
  --strip-icc       strip ICC profile markers from output file
  --strip-xmp       strip XMP markers markers from output file
  --all-normal      force all output files to be non-progressive
  --all-progressive force all output files to be progressive
  --stdout          send output to standard output (instead of a file)
  --stdin           read input from standard input (instead of a file)


■画像ファイルのメタ情報について

画像ファイルのメタ情報(Exif)には、写真の撮影された位置情報などを含んでいる場合がある。
それを表示させるには、次のパッケージを導入する。

〇インストール

# yum install ImageMagick


〇たとえば、GPS情報の表示

# identify -verbose test.jpg | grep GPS
    exif:GPSInfo: ***
    exif:GPSLatitude: **/1, **/1, ****/100
    exif:GPSLatitudeRef: N
    exif:GPSLongitude: ***/1, **/1, ****/100
    exif:GPSLongitudeRef: E
    exif:GPSMapDatum: WGS-84
    exif:GPSVersionID: 2, 2, 0, 0

以上



<参考>
・無料のjpeg圧縮ツール「Jpegoptim」が結構すごい
< https://takakisan.com/jpeg-slim-tool-jpegoptim/ > 2020年4月23日

・LinuxでJPEG,PNGの画像サイズを削減する
< https://morizyun.github.io/infrastructure/tool-optimize-jpeg-png.html > 2020年4月21日

・コンソール上でImageMagickを使って画像ファイルのEXIF情報を取得する
< https://orebibou.com/2017/08/コンソール上でimagemagickを使って画像ファイルのexif情報/ > 2020年4月23日


2012年2月16日木曜日

【Linux CentOS6.2 64bit版】partedコマンドを使いGPT対応大容量ディスクにパーティションを追加する

2017年4月6日 補足追加

CentOS 6.2 64bit版を使って、MBRに代わるGPTに対応した大容量ディスクに、新しいパーティションを追加したときのメモ 
( ☆fdiskライクな「gdisk」コマンドを使った方法はこちらを参照 )


(注意) ここでは、GPTに対応したディスクを扱っていること

GPTに対応したディスクを操作しパーティションを作成するためには、専用コマンドである parted などを使う必要がある。

partedコマンドは、CentOS6.2をminimalでインストールした場合、yumを使ってインストールする必要がある。
http://akira-arets.blogspot.com/2012/02/minimal-centos62-initialize.html



0、コマンドの起動
[root@iscsi-target-01 ~]# parted
GNU Parted 2.1
/dev/sda を使用  ←デフォルトで選択されたデバイス
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted)  ←コマンドを受け付ける状態になる


1、操作対象の物理ディスクを選択する
(parted) select
新しいデバイス?  [/dev/sda]?  ←正しければそのままエンターキーを押す
/dev/sda を使用
(parted)


2、上で選択したディスクの現在の状況を表示させる
(parted) unit MB ←表記をメガバイト単位に切り替えられる
(parted) print
モデル: LSI MR9260-8i (scsi)
ディスク /dev/sda: 3998615MB ←ディスクの大きさ(領域の限界を表している)・・・<END>
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt  ←GPTラベルがつけられたディスクであることを示す

番号  開始      終了      サイズ   ファイルシステム  名前  フラグ
 1    1.05MB    525MB     524MB    ext4                    boot
 2    525MB     84411MB   83886MB  ext4
 3    84411MB   109577MB  25166MB  ext4
 4    109577MB  123209MB  13631MB  ext4
 5    123209MB  135792MB  12583MB  ext4
 6    135792MB  142083MB  6291MB   ext4
 7    142083MB  145229MB  3146MB   linux-swap(v1)
 8    145229MB  147326MB  2097MB   ext4 ←既にある最後領域の限界を表している・・・<START>
(parted)


3、パーティションを作成する
(parted) mkpart
パーティションの名前?  []? iscsi-taget-data
ファイルシステムの種類?  [ext2]? ext4
開始? 147326 ←作成する領域の先頭位置(上記の<START>の値)を指定
終了? 3998615 ←作成する領域の後尾位置(上記の<END>の値)を指定 ←(注)ディスクの残り全部を確保する場合

警告: WARNING: the kernel failed to re-read the partition table on /dev/sda
(デバイスもしくはリソースがビジー状態です).  As a result, it may not reflect all of your changes
until after reboot.


4、確保した領域を確認する
(parted) print
モデル: LSI MR9260-8i (scsi)
ディスク /dev/sda: 3998615MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt

番号  開始      終了       サイズ     ファイルシステム  名前              フラグ
 1    1.05MB    525MB      524MB      ext4                                boot
 2    525MB     84411MB    83886MB    ext4
 3    84411MB   109577MB   25166MB    ext4
 4    109577MB  123209MB   13631MB    ext4
 5    123209MB  135792MB   12583MB    ext4
 6    135792MB  142083MB   6291MB     ext4
 7    142083MB  145229MB   3146MB     linux-swap(v1)
 8    145229MB  147326MB   2097MB     ext4
 9    147326MB  3998615MB  3851289MB                    iscsi-taget-data
 ↑
作成したパーティションは3.8TBの大きさになる。番号からデバイス名はsda9になるだろうとわかる。
(parted)


5、パーティション作成後(3)で、警告が表示されていたので、システムを再起動した
(parted) quit
[root@iscsi-target-01 ~]# reboot


6、確保した領域は未フォーマット状態なので、ファイルシステムを作成する
時間がかかるので、リモートからの人はtmuxなどの仮想端末などで起動するべき。


〇フォーマット対象のパーティションのデバイス名を最終確認しておく。
[root@iscsi-target-01 ~]# cat /proc/partitions

〇フォーマットを行う。
(注意)間違えて別のパーティションを指定しないように!!何度も確認しよう。
[root@iscsi-target-01 ~]# mkfs -t ext4 /dev/sda9 ←作成したパーティションをext4でフォーマットする
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
235069440 inodes, 940255995 blocks
47012799 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
28695 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848, 512000000, 550731776, 644972544

Writing inode tables:   4000/28695  ←進捗状況が示される
Writing inode tables:  4621/28695  ←それから60秒後(結構時間がかかる)
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@iscsi-target-01 ~]#

ext4ファイルシステム作成が完了した。


7、パーティションをシステム起動時に自動的にマウントする設定を行った

・今回作成したパーティションのuuidを調べた
[root@iscsi-target-01 ~]# blkid /dev/sda9
/dev/sda9: UUID="xxxxxxxx-yyyy-xxxx-xxxx-zzzzzzzzzzzz" TYPE="ext4"

・マウントポイントを作成した
[root@iscsi-target-01 ~]# mkdir /volume-01

・fstabを編集した
[root@iscsi-target-01 ~]# vi /etc/fstab
最後の行に追加した
 <略>
UUID=xxxxxxxx-yyyy-xxxx-xxxx-zzzzzzzzzzzz /volume-01              ext4    defaults        0 2

(説明)
 4列目「defaults」…mountコマンドのオプションの一つである。†1
 5列目「0」…dumpコマンドによってバックアップをとらない。†2
 6列目「2」…reboot時のfsckによるチェックの順番である。†2
(ただし、ルートファイルシステムは「1」で、それ以外は「2」にする必要があるらしい。vimで編集中、別の数値を指定すると赤でマークされた。)


・システムを再起動した
[root@iscsi-target-01 ~]# reboot

・マウントできたかどうかを確認した
[root@iscsi-target-01 ~]# mount
<略>
/dev/sda9 on /volume-01 type ext4 (rw)
<略>


東芝 DT01ACA300 3TB アマゾン限定モデル 2年保証 SATA 6Gbps対応3.5型内蔵ハードディスク

新品価格
¥9,180から
(2018/11/30 00:15時点)


<参考>
(1) fstab
< https://wiki.archlinux.org/index.php/fstab > 2017年4月6日

(2) What does the last two fields in fstab mean?
< http://askubuntu.com/questions/9939/what-does-the-last-two-fields-in-fstab-mean > 2017年4月6日

2011年7月25日月曜日

【Linux CentOS5】対象ディレクトリに存在する特定のファイルを、一括して名称変更する【renameコマンド】

□例□

カレントディレクトリ中に存在する「拡張子がconf.txtである複数ファイル」について、一括して名称変更し拡張子をconfに改める
$ rename .conf.txt .conf *.conf.txt


<説明>

・ *.conf.txtで、処理対象にするファイルを絞り込んでいる。

・ アンダーラインの式で、ファイル名について、変更したい文字列変更後の文字列を順に指定する。
(これは、テキストアプリの置換機能に似ている。)



(参考)
・ 複数ファイル一括リネーム < http://d.hatena.ne.jp/poch-7003/20080924/1222266632 > 2011/7/25

【Linux CentOS5】ディレクトリ階層に分けて置かれた複数のファイルを条件指定で抽出し、別のディレクトリにまとめてコピーする【xargsと、cpコマンドの組み合わせ】

たとえば、ディレクトリ階層に分けて保存している「何かの設定ファイル」を抽出し、全て一つのディレクトリにコピーしたい場合には次のようにする。

<ポイント>
・ファイル名について条件を指定してファイルを抽出するためには、findコマンドを使う。
・findで抽出したファイル名のリストを使ってcpコマンドを動作させるには、xargsコマンドを使う。


□例□

カレントディレクトリ以下の階層に存在し拡張子がtxtのファイルを抽出し、/etc/asteriskディレクトリにコピーする。

$ find ./ -type f -print0 -name "*.txt" | xargs -0 cp -v -b -t /etc/asterisk

(findの部位)
・ ./
カレントディレクトリ以下のファイルを対象にしている。

・ -print0 (←ゼロ)
パイプに渡す値の区切り文字にnull文字を使う。(ファイル名にスペースが含まれている場合に備えている) xargsコマンドの -0 (ゼロ)オプションと対にして用いること。

・ -name "*.txt"
拡張子がtxtである全てのファイルを抽出する。


(xargsの部位)
・ -0 (←ゼロ)
パイプから受け取る値の区切り文字をnull文字とする。 (ファイル名にスペースが含まれている場合に備えている) findコマンドの -print0 (ゼロ)オプションと対にして用いること。


(cpコマンドの部位)
・ -v
進捗状況を表示させる。

・ -b
同名のファイルが書き込み先ディレクトリに存在すれば、バックアップする。

・ -t /etc/asterisk
書き込み先 ディレクトリを指定する。




(参考)
・ 「find,xargs,cpのあれこれ」 < http://www.mkamo.org/blog/20090530/309.html > 2011/7/25
・ 「ファイル・ディレクトリをコピー」 < http://www.k-tanaka.net/unix/cp.html > 2011/7/25

Ad

Ad