MiniMagickの使い方  ArgumentError wrong number of arguments (given 4, expected 2)　

#MiniMagickの使い方 
ArgumentError　                                         wrong number of arguments (given 4, expected 2)　





開発環境
ruby 2.7.0p0
Rails 5.2.4.1








はい、またしても出ましたArgumentError
minimagickというgemを導入したらエラーが出たので改善してみました。

なかでも<b>『wrong number of arguments (given 4, expected 2)』</b>についての解説です。



今回はポートフォリオにアップロードした画像のサイズを変えたり余白を設定するgemを実装した時に起きたエラーです。


今までのポートフォリオではインスタライクなサービスなのでとりあえず画像投稿機能までは作っていたのですが、画像のファイル制限はしているものの縦横サイズ感についての制限はしておらず、投稿によってはやけに縦長のトピックになってしまったりしていました。


そこでGemfile の MiniMagickを導入することにしました。

##MiniMagick  とは画像リサイズしたり画像加工に使われるgem


https://qiita.com/ryo-ichikawa/items/6fbb66b8ecfdd0f1f9c4

こちらの記事を参考に導入してみました。

僕は一度つまづきましたがちゃんと上から読むと
ImageMagickを導入することが前提条件としてあります。気をつけましょう汗

```
＄　brew install imagemagick
```

このコードでインストールします。意外と時間がかかるので注意です（５分程度）

アプリ制作途中でimagemagickをインストールしているかどうだったのかわからない方は以下コードで確認してください。

```
$ convert -version
```
これをうって

```
command not found
```
こちらが出ない場合は既にインストールされています。出たらインストールしましょう。

ImageMagickを導入後、MiniMagickをgemファイルに書きます。

```Gemfile 
gem ‘mini_magick’, ‘~> 4.8’
```

gemファイル上でコメントアウトされていることが多いと思うのでコメントを外し更新

```
$ bundle install
```

gemファイルをbundle installしたら一回rails cで止めて rails sで再起動します。


gemファイル導入できたらimage_uploader.rbに

include CarrierWave::MiniMagick



こんな感じで準備完了です

先ほどのqiitaの記事を見てimage_uploader.rbに以下記述


<img width="606" alt="スクリーンショット 2020-05-01 15.26.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572185/42f3ba90-3e3b-2213-0db7-fa37a69a22e9.png">


```image_uploader.rb
process resize_to_limit: [300, 200, “#ffffff”, “Center”]

```

このコードでwidth を最大 300px、height を最大 200 px
リサイズ後のファイルの余白部分を指定色でぬりつぶすこともできるらしい。
この場合、第三引数で塗りつぶしの色を指定(#ffffff)し、第四引数で余白が発生した際の画像の配置を指定(center)。

実際に記事の通りこちらのコードを書いて処理を実行すると

<img width="701" alt="スクリーンショット 2020-05-01 15.03.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572185/2f7d6353-1651-2a7d-9eea-4723594b64e1.png">


<b>こちらのエラーが発生！！</b>

前回の記事でも書いた通りArgumentErrorなので引数関係のエラーということがわかる　詳細を見ると

wrong number of arguments (given 4, expected 2)


早速検索するとこちらの記事が
https://qiita.com/TOSHIMITSU_MIYACHI/items/82417ab6126d816af4e4

<h2>つまり２つの引数を期待しているのに４つの引数がきているよ！！
というエラー</h2>

先ほど書いたコードを見ると


```image_uploader.rb
process resize_to_limit: [300, 200, “#ffffff”, “Center”]
```

ここでの引数が４つになっているのでこれを

```image_uploader.rb
process resize_to_limit: [300, 200, “Center”]
```
指定色を消して再度更新すると



先ほどと少し内容が変わって
<img width="680" alt="スクリーンショット 2020-05-01 15.25.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572185/ca426ea2-2eaa-9ed8-a1e2-982e7296cd75.png">

wrong number of arguments (given 3, expected 2)になりました。

つまり２つの引数を期待しているのに対し３つの引数になってるよというエラーです。


こうなるとprocess resize_to_limit: の書き方が間違っているのかなーと思い公式リファレンスを読んでみました。


https://github.com/carrierwaveuploader/carrierwave
そのままだと英語で難しいのでブラウザ機能で日本語化

該当箇所
<img width="965" alt="スクリーンショット 2020-05-01 19.02.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572185/f3afc7f4-a697-f01f-b9d8-27c058898b19.png">


<b>どうやらresize_to_limit: 元々画像サイズの指定のみのようです</b>


##<b>resize_and_pad:</b>


これが縦サイズ、横サイズ、残りの領域の指定色、画像位置の指定を設定することができる方法のようです。(4つの引数）

参考にさせていただいたqiitaの記事は１年前のものだったのでバージョンが変わり仕様が変わってしまったのかもしれません。


もしくは環境が違ったりしてエラーが出てしまったのかもしれません。

なので

#解決法
```image_uploader.rb
process :resize_and_pad => [500, 500, “#ffffff”, “Center”]
```


こちらのコードで書き直すことでエラーも出ず期待通りの結果を得られるようになりました。





同じ状況で苦しんでいる方の参考になれば