php画像縮小したら黒い枠線が表示されるようになって困った

2017-01-10   

 

※仕事関係ネタです。

ブログシステムを作ってる時にブチ当たった問題。

ブログに載せる写真をアップロードし写真を縮小する処理で、何故か縮小された写真に黒い枠線がつくようになった((((;゚Д゚))))

izI7cIPdAFCbnm5i.jpg

なんだべこれ? 縮小部分のコードは既存のブログシステムを流用してる。いくつかのブログで同じコードを使っているけど、こんな黒線見たこと無い・・・なんだべ?

「php 画像縮小 黒枠」とかでググっても同じ問題はまったく見つからず(´・ω・`)

画像アップロード~縮小~向き変えのあたりをざっと眺めてみる。心当たりといえばPEL: PHP Exif Libraryあたりかな?PHPでEXIFを読みこむライブラリ。これがバージョンアップした影響?ん、、でも、EXIF読んでるだけだし関係ないか・・・・PHP自体のバージョンかな? 問題が起きてるサーバーは去年暮れに契約したロリポップのサーバー。PHPのバージョンが今までオレが使っているやつより新しいのは間違いない。

ステップごとに調査していくとPELは無罪。ImageCreateFromJpegとかimagecopyresampledの仕様が変わったのかな?って調べたけど、そーでも無い。

で、ついに犯人を特定。問題を起こしてるのはimagerotateでした。imagerotateがらみで検索したら毎度お世話になっているStack overflowのBBSにて同じ問題で悩んている人が見つかった。

PHP - Rotate image with GD gives black borders - Stack Overflow

が、答えは載って無くて解決できず(´・ω・`)

imagerotateは写真を斜め45度に回転したとき、画像がない部分は「黒」になるらしい。下図のイメージですね。

6Ai1UrxamvCsAnaX.jpg

きっとこの「黒」が原因に違いない。45度の回転はしてないけど、なぜか1ピクセルの黒い枠線ができるバグがあるに違いない。(GDはバグが多い印象)。

ってことで、いろいろ調べて解決しました。

imagerotateのマニュアルでは↓になってます。3つ目のパラメーターに背景色ってのがあります。

imagerotate ( resource $image , float $angle , int $bgd_color [, int $ignore_transparent = 0 ] )

今までのコードは imagerotate($source, 0, 0)っていう風に背景色を0にしてて問題なかった(枠線は無かった)。けど、PHPのバージョンアップだかGDのバージョンかなんかの影響でこのバグが発生したみたい

imagerotate($source, 0, 255)ってやれば白い枠線で書いてくれると期待したけどダメw

結局は以下のようにimagecolorallocateを一つ噛ませてimagecolorallocateのRGBに255,255,255をセット。それをimagerotateへ渡してやったら成功しました。

$source = imagecreatefromjpeg($img_path);

$border_color = imagecolorallocate($source, 255, 255, 255);

$rotate = imagerotate($source, 0, $border_color);
 
厳密には枠線がなくなったわけでなく「白い枠線が残っている」んだと思うけど結果オーライ。
 
 

 

カテゴリ:PC・スマホ・WEBネタ

UNITORO以外の最近の投稿

twitter

Recent entries

ZrOoKv8tOCfOsw4_.jpg

冬の琵琶湖の水中動画!

pSs7Ea7iw2lfiRCM.jpg

ワードプレスに敗北

8IzvZddtsq3jgUhk.jpg

ゴルフ7ネタ『VW純正 インフォテイメントシステム Discover Proのブルートゥース割り込みについて』

WJXdFgQdbzPjk_LJ.jpg

ダイワ(Daiwa) スピードサルカン Sが廃盤?

GdWVl_ou0JS1DloG.jpg

パソコンでも何でもかんでも8000円で回収してくれた凄いサービスを使ってみた

zXrCKG2Wiwm3Be_w.jpg

パラレルポート

S2b5XLi_rreVz64p.jpg

Yahoo!カーナビが遂にトンネル対応!!

90pKKIiI6Duarnly.jpg

amazonプライムビデオが長距離運転・移動の最高のオトモかも?

QGxBNftdAJ7vvqow.jpg

Mountek AIRSNAP エアコン吹き出し口取付型 スマホ車載ホルダーをVWゴルフ7に付けてみた

TXg5au5ONQyIQrv8.jpg

チューブラーの釣り竿が想像以上に折れなかった!けど、ある方法ですぐに折れた

picture from keitai

バスプロはやっぱり上手だった

picture from keitai

やっとつ抜け

picture from keitai

初釣り来たらまたバスプロがいた

3ccJ4pjXAUKLBxsU.jpg

中古DELL Optiplex7010を更にパワーアップした話

CtOcqQpPPrlAWfDP.jpg

amazon Fire TV Stickを一年使ってみた→更に充実してる

3d1cjF9vaZEwIdbN.jpg

ありがとう!REDPEPPERSの20年

picture from keitai

2016年もありがとうございした

TXhiHbWfeD3tIL8k.jpg

2017年に欲しい夢の釣り道具

QelsP4LUUKFZ2Lon.jpg

2016年初投入した結果、これは良かった!って思ったバス釣り道具

EWiWZZmdnPQ00_2S.jpg

2017年に繋がる高速道路

Bp5jFerVKorZ47D6.jpg

Lowrance Elite-7TiのGPS精度はどんな感じなんだろう?

zU6bIXgjvkowaUfb.jpg

八郎潟のアシ・ガマ激減!でも脅威の事実を発見!

OAHeu19qs7hQVgjd.jpg

榛名湖で3キャスト連続で良いサイズが釣れたFLTトランザムの秘密を公開

VJ9STmlwKbYGUK9P.jpg

ロランスエリート5DSIで色付きマップが表示できた(-ω☆)

PavG4IrU0vtWkZfW.jpg

リーフマスターにGoogleアースの衛星写真を重ねてみた

4KH3rVBqFWl8dh4q.jpg

REEFMASTER バージョン2について

Iv8yXThqTqfv2EQ_.jpg

4000円弱のサイクロン掃除機が凄かった

BM5JGC8lemVJuVEO.jpg

Lowrance HDS Carbonを調べてみたら・・思わぬ製品を発見した

b34QgCKmQvKATe_W.jpg

ローランスのソフトウエアアップデート

r8ZXU5MhKAhbHkSX.jpg

2016年榛名湖・八郎潟のヒットルアー200

Category

Popular entries 2018

Popular entries 2017

Popular entries 2016