Php 使用Cloudinary URL缩放图像的模型中的Larvel自定义属性

Php 使用Cloudinary URL缩放图像的模型中的Larvel自定义属性,php,laravel,cloudinary,Php,Laravel,Cloudinary,在我的web应用程序中,我使用Cloudinary进行图像存储。图像上传工作正常,但我想为图像创建一个自定义属性,以便在从数据库中获取图像url时对宽度和高度进行一些修改 图像的链接: 它存储在数据库中,但是当它从数据库中获取时,它应该具有一定的伸缩性,这样它就不会花费太多的时间来加载网站 以下是我的故事模型: class Story extends Model { use Commentable, Searchable; /** * The attributes th

在我的web应用程序中,我使用Cloudinary进行图像存储。图像上传工作正常,但我想为图像创建一个自定义属性,以便在从数据库中获取图像url时对宽度和高度进行一些修改

图像的链接:

它存储在数据库中,但是当它从数据库中获取时,它应该具有一定的伸缩性,这样它就不会花费太多的时间来加载网站

以下是我的故事模型:

class Story extends Model
{
    use Commentable, Searchable;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'title',
        'summary',
        'content',
        'created_at',
        'story_statuses_id',
        'image', 'language',
        'likes',
        'views',
        'url_key',
    ];



    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'is_public' => 'boolean',
    ];

我不知道如何使用它,有人能帮忙吗?

Cloudinary支持运行时图像大小调整

根据他们的文件而不是本

使用

如您所见,我在上传后添加了
/w\u 100、h\u 100、c\u fit/
,以指示Cloudinary动态调整大小

w
表示宽度,
h
表示高度,
c
表示裁剪时要使用的刻度类型

您可以找到文档

更新1

像这样的东西应该可以

$default_url = "https://res.cloudinary.com/wokong/image/upload/v1568570430/storyHeader/cxjir4g9tkaa8xepxodg.jpg";

$width = 100;
$height = 100;

echo str_replace("/upload", "/upload/w_".$width.",h_".$height.",c_fit", $default_url);
更新2

你的模型看起来像

class Story extends Model
{
    use Commentable, Searchable;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'title',
        'summary',
        'content',
        'created_at',
        'story_statuses_id',
        'image', 'language',
        'likes',
        'views',
        'url_key',
    ];



    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'is_public' => 'boolean',
    ];

    public function getImageForWebAttribute()
    {
        $width = 100; // You can keep this info in app config
        $height = 100;

        // Here i am assuming `image` is where you store Cloudinary url
        return str_replace("/upload", "/upload/w_".$width.",h_".$height.",c_fit", $this->image);
    }
}
你可以这样称呼它

$story->image_for_web

可以找到laravel自定义突变子的文档

您可以保存上传响应中返回的
公共id,而不是将上传图像的整个URL保存在数据库中。
然后,您可以使用Cloudinary的SDK为您生成转换url,方法是将所需的转换参数与图像的
public\u id
一起传递给
Cloudinary\u url()
Helper函数

例如,假设您要生成一个图像的URL,其
public\u id
sample
。此外,您希望根据客户端的设备和浏览器,以尽可能最佳的格式交付图像。您还希望使用Cloudinary的自动质量算法,将图像缩小到500px的宽度,同时保留其原始纵横比。 您可以使用以下代码来实现它:

$url = cloudinary_url('sample', array(
  'fetch_format' => 'auto',
  'quality' => 'auto',
  'crop' => 'scale',
  'width' => 500 
));
echo$url将打印以下内容:

http://res.cloudinary.com/<cloud_name>/image/upload/c_scale,f_auto,q_auto,w_500/sample
http://res.cloudinary.com//image/upload/c_scale,f_auto,q_auto,w_500/样本
如果希望使用SDK生成整个
标记,可以使用
cl\u image\u tag()
作为
cloudinary\u URL()
的仅URL输出的替代方法


下面是Cloudinary文档中的相关部分的链接,其中包含了一些关于如何使用
cl\u image\u tag()
Cloudinary\u url()

好的,这是对

例如,假设您从laravel中的控制器将$images附加到视图 您可以通过url动态生成固定的宽度和高度,并连接到引导网格系统

`


`

您还可以通过控制器方法使用设置图像的此属性
Cloudder::show(Cloudder::getPublicId(),[“width”=>$width,“height”=>$height])

基于我对您问题的理解,我建议创建多个具有所需比例的图像并上传。ie)
cxjir4g9tkaa8xepxodg-160x160.jpg
cxjir4g9tkaa8xepxodg240x240.jpg
etcIf我理解正确,您想在发送url和响应之前将其修改为缩放版本吗?对@Jerodev我确实希望这样,但我不想将缩放后的图像再次存储到云端。我只是想让用户体验一下@cerlin我怎么能使用自定义属性呢?我了解这么多,但如何创建自定义属性,以便它能够自动从数据库中的存储链接或其他方式获取“cxjir4g9tkaa8xepxodg.jpg”。我知道的链接,但代码明智如何做!!!!我还需要在cloudinary中存储图像的实际大小,但是当它返回时,由于这个原因,它应该缩放,我需要一个自定义属性,在那里我被卡住了。
$story
是您从数据库查询的模型。由于您没有分享任何关于查询的逻辑,我只是发布了这篇文章,谢谢兄弟。我在资源文件中更改了它,兄弟,我是一个新的拉威尔和网络开发人员,所以。。。还有一个关于linkedn的连接请求,请检查我是否想从您那里了解更多信息,如果有任何疑问,我将非常感谢u bro。姓名:Rashmi Ranjan Sahoo
     <div class="col-6 col-md-4 col-lg-3">
            <a href="{{$image->image_url}}">                     
            @php
            $url = $image->image_url;
            @endphp
<img class="img img-fluid" src="{{ str_replace("/upload", "/upload/w_350,h_220,q_70,c_scale", $url) }}" alt="">
                </a>    

           

        </div>