画像加工ライブラリIntervention imageで処理を行うと、画像が意図せず横向きになってしまうことがある。
orientate()
関数を使えば防げる。
このメソッドは、EXIF 画像プロファイル設定の「方向」を読み取り、画像を回転させて画像を正しく表示します。EXIF データを正しく読み取るには、イメージ オブジェクトをファイル パスからインスタンス化する必要があります。
注:--enable-exifこのメソッドを使用するには、PHP を でコンパイルする必要があります。Windows ユーザーもmbstring拡張機能を有効にする必要があります
https://image.intervention.io/v2/api/orientate
公式によると、この関数を使うとさも画像の方向を正すかのような言い方だが
使っていない状態で勝手に回転させられて困ってるねんけどって感じ。
$file = '元データ.png';
Image::make($file)->resize(800, 280, function ($constraint) {
$constraint->aspectRatio();
})
->orientate()//勝手に回転することを許さない
->save(storage_path(('app/public/stock_thumbnail/hogehoge.png'), 100));
save()
の直前とかに書けばいいと思う。
これでうまくいったらこの話は終わり。
これ以上先は読まなくていい。
Reading Exif data is not supported by this PHP installation.のエラーになる場合
Dokcer環境で発生しがち。
Dockerfile編集
コンテナが立ち上がっているなら、 docker compose stop
コマンドなどで1回止める。
Dockerfileにexifを書き足す必要がある。
あくまで自分の環境だが、ファイル全体はこうなった。
FROM php:8.0-fpm-buster
SHELL ["/bin/bash", "-oeux", "pipefail", "-c"]
ENV COMPOSER_ALLOW_SUPERUSER=1 \
COMPOSER_HOME=/composer
COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer
RUN apt-get update && \
apt-get -y install git unzip libzip-dev libicu-dev libonig-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev ffmpeg && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
docker-php-ext-configure gd --with-freetype --with-jpeg && \
docker-php-ext-install -j$(nproc) gd exif && \
docker-php-ext-install intl pdo_mysql zip bcmath
COPY ./php.ini /usr/local/etc/php/php.ini
WORKDIR /work
docker-php-ext-install -j$(nproc) gd exif && \
の部分がその記述にあたる。
自分の場合はgdを既にインストールする記述になっていたので、その最後にexifを追加しただけ。
必要な部分だけはここにピックアップしてある。
docker上のPHPでEXIFを使えるようにする - ソフラボの技術ブログ
同じ記述を2回以上する必要はないので、足りないものだけ付け足すべき。
再構築&起動
Dockerfileの編集が完了したら、docker compose build
コマンドで再構築。
Service 'phpmyadmin' has a link to service 'mysql' which is undefined
のエラーが出る場合は、コマンドが間違っている可能性がある。
docker build
みたいにcomposeが抜けていたりだとか。
Laradock環境ならdocker-compose build
と打つべきだったりとか。
とにかく自分の環境に合わせてやってみてほしい。
うまくリビルドできたら、コンテナを立ち上げる。
docker compose up -d
コマンドを使うことが一般的。
この後試したらうまくいった。
Docker環境の構築について詳しく
この記事が分かりやすい!
【超入門】20分でLaravel開発環境を爆速構築するDockerハンズオン - Qiita