画像加工ライブラリ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

無制限に質問可能なプログラミングスクール!

万が一転職できない場合は、転職保障全額返金できるコースもあり!!

無制限のメンター質問対応

 

DMMウェブキャンプでプログラミングを学習しませんか?

独学より成長スピードをブーストさせましょう!

 

まずは無料相談から!

おすすめの記事