環境
以下のコマンドを実行するとすべてアンインストールされる
npm ls -gp --depth=0 | awk -F/node_modules/ '{print $2}' | grep -vE '^npm$'| xargs npm -g rm
yarnでnpmパッケージのインストールを行いたいのではなくyarnバイナリファイル自体をChefで自動インストールしたいって話
include_recipe 'apt::default' apt_repository 'yarn' do uri 'https://dl.yarnpkg.com/debian/' key 'https://dl.yarnpkg.com/debian/pubkey.gpg' components ['main'] distribution "stable" action :add end package "yarn"
すまん、もうあったわ(
けどこのcookbook自体はyarn installを行うやつで、yarn::repositoryでレポジトリ登録はやってくれる。が、apt install yarn
は手動っぽい
多分7以降でも動くと思う(未検証
例えば以下のような画像3枚があったとして
こんな感じに縦並びで1枚の画像に結合したい
PHPからImageMagickを叩くことができる(imagick.soのインストールが必要)
さすがPHPといったところか、専用のメソッドがあるのでわずか数行で完成する。
<?php $images = ["gazo1.jpg", "gazo2.jpg", "gazo3.jpg"]; $result = new Imagick(); foreach ($images as $path) { $im = new Imagick($path); $result->addImage($im); } $result->resetIterator(); $combined = $result->appendImages(true); $combined->setImageFormat("jpeg"); header("Content-Type: image/jpeg"); echo $combined;
appendImages()時にtrueを渡しているのは縦並びに結合したいから。他の言語使ってると???ってなるが、引数にtrueだと縦並び、falseだと横並びに結合してくれる。
が、いろいろあってサーバーにImageMagickがインストールできない場合、GDを使う手もある。
<?php function mergeImages($images) { $total_w = 0; $total_h = 0; foreach ($images as $path) { list($w, $h) = getimagesize($path); $total_h += $h; if ($w > $total_w) { $total_w = $w; } } $result_im = imagecreatetruecolor($total_w, $total_h); $merged_img_h_sum = 0; foreach ($images as $path) { $img = imagecreatefromjpeg($path); list($width, $height) = getimagesize($path); // コピー先の画像,コピー元の画像,コピー先のx座標,コピー先のy座標,コピー元のx座標,コピー元のy座標,コピー元の幅,コピー元の高さ imagecopy($result_im, $img, 0, $merged_img_h_sum, 0, 0, $width, $height); imagedestroy($img); // どこのy座標まで画像を展開したかを記録 $merged_img_h_sum += $height; } // ブラウザに表示 header("Content-Type: image/jpeg"); imagejpeg($result_im); imagedestroy($result_im); // ファイルに保存 $save_path = 'result.jpg'; imagejpeg($result_im, $save_path); } $images = ["gazo1.jpg", "gazo2.jpg", "gazo3.jpg"]; mergeImages($images);
こっちは流石に関数化するレベルの行だが、やってることはそんなに難しくはない。先に空の画像を用意してforEachでそれぞれ画像を上から下へ貼り付けているイメージ。
PHPの公式ドキュメントを見て貰えればわかるように、PHPからImageMagickを通して多くの画像処理を行うことができる。が、当然サーバー上にImageMagickがインストールされてなければならない。
docker上で操作したいときに若干はハマったのでメモ
今使ってるイメージは公式のphp:5.6-fpm
FROM php:5.6-fpm # (略) RUN apt-get update && apt-get install libmagickwand-dev -y --no-install-recommends \ && pecl install imagick-3.4.3 \ && docker-php-ext-enable imagick
libmagickwand-devが結構ポイントで、ただのImageMagickではダメだった。。