特定の画像のサイズ変更プロセスに関する小さな問題があります。入力タイプを含むフォームを送信しようとしています->ファイル<-サイズ変更せずに写真をアップロードできました。画像なので、以下を使用して介入画像ライブラリをインストールしました。
composer require intervention/image
次に、ライブラリをLaravelフレームワークに統合しました
Intervention\Image\ImageServiceProvider::class
'Image' => Intervention\Image\Facades\Image::class
そして最後に次のように設定しました
php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"
私のコントローラーは次のようなものです
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Image;
class ProjectController extends Controller{
public function project(Request $request){
$file = Input::file('file');
$fileName = time().'-'.$file->getClientOriginalName();
$file -> move('uploads', $fileName);
$img=Image::make('public/uploads/', $file->getRealPath())->resize(320, 240)->save('public/uploads/',$file->getClientOriginalName());
}
}
しかし、写真のサイズを変更する代わりに、次の例外がスローされます
NotReadableException in AbstractDecoder.php line 302:
Image source not readable
Image::make($file->getRealPath())
の代わりにImage::make('public/uploads/', $file->getRealPath())
であるべきではありませんか?
Image::make()
は2つの引数をとらないようですので、問題になる可能性があります。
これを試して:
$file = Input::file('file');
$fileName = time() . '-' . $file->getClientOriginalName();
$file->move('uploads', $fileName);
$img = Image::make($file->getRealPath())
->resize(320, 240)
->save('public/uploads/', $file->getClientOriginalName());
または、最初にファイルを移動せずに実行したい場合は、これを試してください:
$file = Input::file('file');
$img = Image::make($file)
->resize(320, 240)
->save('public/uploads/', $file->getClientOriginalName());
L5.2
Input
ファサードから画像を直接取得することはできません。そのためには、まずサーバーに画像を保存してから、Image
facadeにパスを与えて画像の操作を行う必要があります。
コードは次のようになります:
if ($request->hasFile('picture') ) {
$destinationPath = public_path('uploads/user');
$photoname = date("YmdHis");
$file_extention = '.'.$request->file('picture')->getClientOriginalExtension();
$photo = $photoname.$file_extention;
$file_check = $request->file('picture')->move($destinationPath, $photo);
$thumb_path = $destinationPath.'/thumbnail/'.$photo;
$new_filePath = $destinationPath.'/'.$photo;
$assets_path = url('uploads/user/');
$img = Image::make($assets_path.'/'.$photo)->fit(100)->save($thumb_path,40);
$data['picture'] = $photo;
}
以前はInput
ファサードから直接画像を取得することが可能であったため、直接的な解決策を探していました。あなたの誰かが直接解決策を持っているなら、ここにあなたのコードを見せてください。乾杯。
保存する前にファイルをアップロードしてサイズを変更するのは簡単です:(検証やチェックなしで)
UploadedFileのインスタンスをInterventionImage :: make()に直接渡すことができます
public function upload(Request $request)
{
$file = $request->file('file');
$filename = $file->getClientOriginalName();
$img = \Image::make($file);
$img->resize(320, 240)->save(public_path('uploads/'.$filename))
}
元のサイズとサイズを変更した画像を保存する場合:
$img->save(public_path('uploads/'.$filename))
->resize(320, 240)
->save(public_path('uploads/thumb_'.$filename));
これは現在5.2.45である最新の5.2バージョンでテストされただけです
[編集:]
あなたが電話した場合
$file->move();
使用しないでください
$file->getRealPath()
これは、move()を呼び出した後にfalseを返すためです
$filename = $file->getClientOriginalName();
$file->move('uploads', $filename);
dd($file->getRealPath());
この問題は、移動後に画像のサイズを変更したときに発生しました
$file->move('uploads', $fileName);
$file->getRealPath()
は、画像を移動した後にfalse
を返します。移動プロセスの前に画像のサイズを変更する必要があります。それでおしまい ;)
$img=Image::make('public/uploads/', $file->getRealPath())->resize(320, 240)->save('public/uploads/',$file->getClientOriginalName());
$file->move('uploads', $fileName);