0

我正在尝试使用干预来调整 Laravel 4.2 中的图像大小,但我想一次将图像移动到 2 个不同的文件夹。

如果我运行下面的代码

if(Input::hasFile('product_images')) {
    $images = Input::file('product_images');
      foreach($images as $image) {
      if($image->isValid()) {
        $file_name = microtime();
        $file_name = str_replace(' ', '_', $file_name);
        $file_name = str_replace('.', '_', $file_name);
        $file_name = $file_name . '.' . $image->getClientOriginalExtension();
        $file_name = $image->getClientOriginalExtension();
        $image->move(public_path() . '/uploads/', $file_name);
        $file = Image::make(sprintf('uploads/%s', $file_name))->resize(800, 600)->save();

它(上面的代码)适用于上传文件夹,但是,如果我在上传文件夹中创建另一个名为 thumbnail 的文件夹并添加下面的行,我会得到错误......,

("Intervention\Image\Exception\NotReadableException","message":"图像源不可读")........

    $file = Image::make(sprintf('uploads/thumbnail/%s', $file_name))->resize(75,75)->save();

提前致谢

4

4 回答 4

0

使用干预/图像包

public function upload() {
      $image = \Image::make(\Input::file('image'));
      $path = storage_path('app')."/";

     // encode image to png
     $image->encode('png');
     // save original
     $image->save($path."original.png");
     //resize
     $image->resize(300,200);
     // save resized
     $image->save($path."resized.png");
}
于 2020-02-04T09:57:05.597 回答
0

上述代码的问题是原始文件被调整为模糊图像。可以通过使用下面代码中使用的 aspectRatio 来避免这种情况。

还将内存限制设置为-1。这样就可以更轻松地为网页上传更大的图像,30 到 60 KB 甚至更大。

实现将很像:

$imageType = array(
                'thumbnail' => array(
                    'width' => 50,
                    'height' => 50                    
                ),
                'detail_page' => array(
                    'width' => 200,
                    'height' => 200                    
                ),
                'product' => array(
                    'width' => 400,
                    'height' => 400                    
                ),
            );

if(Request::hasFile('image')) {
$image = Request::file('image');
    if($image->isValid()) {
        ini_set('memory_limit', '-1');
        $file_name = microtime();
        $file_name = str_replace(' ', '_', $file_name);
        $file_name = str_replace('.', '_', $file_name);
        $file_name = $file_name . '.' . $image->getClientOriginalExtension();
        $image->move(public_path() . '/uploads/', $file_name);
        $response['file_name'] = $file_name;

foreach ($imageType as $key => $value) {

    $file = Image::make(sprintf('uploads/%s', $file_name))->resize($value['width'], $value['height'],
            function($constraint) {
                       $constraint->aspectRatio();
            });

    $file->save(public_path() . '/uploads/'.$value['width'].'X'.$value['height'].'/'. $file_name);
}

$product_image_url = URL::to('uploads/' . $file_name);
于 2016-09-08T08:42:30.533 回答
0

我终于设法在 Laravel 4.2 中使用干预来调整图像大小,还可以在一行代码中一次将图像移动到不同的文件夹。

请参阅下面的代码片段,

$file = Image::make(sprintf('uploads/%s', $file_name))
  ->resize(800, 600)->save()
  ->resize('1280', '1024')->save(public_path() . '/uploads/1280x1024/' . $file_name)
  ->resize('316', '255')->save(public_path() . '/uploads/316x255/' . $file_name)
  ->resize('118', '95')->save(public_path() . '/uploads/118x95/' . $file_name);

如您所见,我在 public_path 的上传文件夹中创建了 3 个文件夹,分别命名为 1280x1024、316x255、118x95。

因此,如果您使用上面的代码,在 resize() 之后给出 save() 函数的路径并继续重复以一次保存所有调整大小的图像。

如果有人知道更好的答案,请尝试发布并改进它。

于 2015-10-04T12:02:25.920 回答
-1
if(Input::file()){
    $image = Input::file('image');
    $filename  = time() . '.' . $image->getClientOriginalExtension();
    $path = public_path('profilepics/' . $filename);

    Image::make($image->getRealPath())->resize(200, 200)->save($path);
    $user->image = $filename;
    $user->save();
}
于 2017-05-09T12:19:58.653 回答