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以外の最近の投稿

19年04月18日 八郎潟 Go86ツアー2019春3/3

結果的に3日間とても暖かい日並に恵まれる。この時期、こんな...

04月22日(月)

19年04月17日 八郎潟 Go86ツアー2019春2/3

予報通り朝イチは快晴無風。人間は我儘なもので風が吹いたら...

04月21日()

19年04月16日 八郎潟 Go86ツアー2019春1/3

近年は新潟周りで秋田へ行ってます。道中、日本海が見える区...

04月20日()

19年04月08日 琵琶湖 リベンジ!と意気込むも・・

野尻湖でガイドを頑張っている林晃大君ですが、野尻湖がオフ...

04月14日()

19年04月04日 琵琶湖 ラスト10分までゼロやってん

チーム山形県民!ってことで薮田くんに乗せてもらって出撃。...

04月11日(木)

19年04月02日 榛名湖 昼までガイドが凍る極寒と強風に為す術なし

前週2匹釣れたのに気をよくして2週連続で榛名湖に行ってみま...

04月11日(木)

@title@
巡り巡ってオレのところに来たスタッガー4インチ旧パケ

榛名湖ように購入。左はスーパースレッジの中古美品。いろん...

04月01日(月)

19年03月26日 榛名湖 2019年榛名湖初釣り!

先週の金曜日、河口湖の湖上で榛名湖マスターの翼くんと話を...

03月29日(金)

@title@
デコイVJ-76マジックヘッド

小物類をちょっと補充した際、毎回このページに書いてる訳じ...

03月28日(木)

19年03月22日 シベラ湖 今年もノーバイト

夕方ちょい釣りだし釣れてないので「オレの釣り」に書いたり...

03月28日(木)

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