3

我想不通。当我像这样调整上传图片的大小时,

public function up(Request $request) {

    $user = $request->user();
    $image= $request->file('images');
        if(!empty(($image))){
        $files = Input::file('images');
        foreach($files as $file) {
            if(!empty($file)){
    $new_file = Image::make($file)->resize(200,200);
    var_dump($new_file);exit;

var_dump 返回:

object(Intervention\Image\Image)#241 (9) {
object(Intervention\Image\Imagick\Driver)#242 (2) {
["decoder"] object(Intervention\Image\Imagick\Decoder)#243 (1) {
}
["encoder"] object(Intervention\Image\Imagick\Encoder)#244 (4) {
["result"] NULL
["image"] NULL
["format"] NULL
["quality"] NULL
}
}
object(Imagick)#237 (0) {
}
["backups":protected] array(0) {
}
["encoded"] ""
["mime"] "image/jpeg"
["dirname"] "/Applications/MAMP/tmp/php"
["basename"] "phpJcAyxV"
["extension"] NULL
["filename"] "phpJcAyxV"
}

结果、图像、格式、质量全部为空。我在这里想念什么?

更新这是 HTML:

{!! Form::open(array('action'=>'FileController@up','files'=>true,))!!}
<div class='row'>
      <div class='col-md-2'>
        {!! Form::label('images','Profile Picture')!!}
        </div>
    <div class='col-md-2 profile-pic'>
      @if(isset($pic)) 
      <img src='{{$pic}}'/>
      @else 
      <img src='/images/user-icon.jpg'/>
      @endif
    </div>
    <div class='col-md-6'>
        {!! Form::file('images[]') !!}
        {!! Form::hidden('category','profile')!!}
        {!! Form::submit('Upload',['class'=>'form-control btn btn-md btn-info','style'=>'width:100px; margin-top:50px;'])!!}
    </div>
</div>
{!! Form::close()!!}

也许我不应该使用数组?

4

2 回答 2

1

好的,所以我仔细研究了你的问题。编码器值为空,因为您还没有设置它们。我假设您不打算对它们进行编码。你仍然有一个图像。您的服务器已成功接收到它。这只是意味着您没有对其进行编码。

此外,在这段代码中:

public function up(Request $request) {

    $user = $request->user();
    $image= $request->file('images');

    if(!empty(($image))) {
        $files = Input::file('images');

您不需要使用Input外观来抓取图像,因为您已经获得了所有图像$request->file('images');

换句话说,Input::file('images')与 完全一样$request->file('images')

另外,与其检查它是否为空,我认为使用该hasFile方法更具可读性,所以我认为这样的内容更具可读性:

public function up(Request $request) {

    $user = $request->user();

    if($request->hasFile('images')) {

        $files = $request->file('images');

总的来说,它只是:

public function up(Request $request) {

    $user = $request->user();

    if($request->hasFile('images')) {

        $files = $request->file('images');

        foreach ($files as $file) {
            $new_file = Image::make($file)->resize(200,200);
        }
    }
}

再一次,当你dd($new_file)的编码器属性仍然是假的,但你仍然有一个图像。例如,如果您return $new_file->response();,您应该看到您设置的新尺寸的图像。

如果您确实想对图像进行编码,Intervention Image 包提供了一种encode方法。

$new_file = Image::make($file)->resize(200,200)->encode();
于 2015-11-12T04:26:25.180 回答
0

出于某种原因,这对我有用:

我在文件系统中有一个当前图像,我正在旋转但没有任何反应,我从谷歌开发选项中检查源代码并看到你得到的相同错误。

object(Intervention\Image\Image)#716 (9) {
  ["driver":protected]=>
  object(Intervention\Image\Gd\Driver)#718 (2) {
    ["decoder"]=>
    object(Intervention\Image\Gd\Decoder)#719 (1) {
      ["data":"Intervention\Image\AbstractDecoder":private]=>
      NULL
    }
    ["encoder"]=>
    object(Intervention\Image\Gd\Encoder)#720 (4) {
      ["result"]=>
      NULL
      ["image"]=>
      NULL
      ["format"]=>
      NULL
      ["quality"]=>
      NULL
    }
  }

在控制器中:

public function rotatePhoto($id)
{
        $photo = BookPublicationPhoto::find($id);
        $image_url = storage_path().'/cache/img/publication/'.$photo->published_book_id.'/'.$photo->image_file_name;
        $img = Image::make($image_url);
        // rotate image 90 degrees clockwise
        $img->rotate(-45);
        var_dump($img);
        $response['mensaje'] = "No tienes los permisos para eliminar ésta foto";
}

解决方案$img->save();是在动作之后添加$img->rotate(-45);(旋转,调整大小..)

文档

于 2017-09-05T03:55:05.177 回答