grails存储图像维度数据的位置

grails存储图像维度数据的位置,grails,Grails,我有一个需要重构的照片服务。以下是当前的方法: def getPhotoUrl(String publicId, String format) { getCloudinary().url().format(format).transformation(new Transformation().width(288).height(194).crop("fill")).generate(publicId) } def getGalleryThumbnailUrl(String public

我有一个需要重构的照片服务。以下是当前的方法:

def getPhotoUrl(String publicId, String format) {
    getCloudinary().url().format(format).transformation(new Transformation().width(288).height(194).crop("fill")).generate(publicId)
}

def getGalleryThumbnailUrl(String publicId) {
    getCloudinary().url().format('jpg').transformation(new Transformation().width(205).height(205).crop("fill")).generate(publicId)
}

def getGalleryPhotoUrl(String publicId) {
    getCloudinary().url().format('jpg').transformation(new Transformation().width(950).height(950).crop("fill")).generate(publicId)
}
照片服务方法都是从taglib调用的

除了图像维度外,这些方法非常相似,我还需要添加一些不同维度的方法。虽然我可以重构一个方法来获取图像维度,但您会在哪里定义/传递这些维度

-将维度放入硬编码的标记库中,并将其传递到服务调用中。
-将维度放在Config.groovy中,并使用 服务从配置中加载它们
-把尺寸放进去 Config.groovy,并让taglib加载/传递它们到服务
-只需在服务中对其进行硬编码即可

尺寸几乎不会改变

编辑:::修订代码

public enum PhotoSize {

    GALLERY(grailsApplication.config.img.gallery.full.height, grailsApplication.config.img.gallery.full.width),

    //def config = Holders.config
    def grailsApplication

    final int height
    final int width

    PhotoSize(int height, int width) {
        this.height = height
        this.width = width
    }
    public int getHeight() {
        height
    }
    public int getWidth() {
        width
    }
}

存储图像大小的另一种方法是使用
enum
如下:

enum ImgSizeEnum {
    THUMBNAIL(100, 100),
    LARGE(200, 200)

    private final int height
    private final int width

    ImgSizeEnum(int height, int width) {
        this.height = height
        this.width = width
    }

    public int getHeight() { return height }
    public int getWidth() { return width }
}
然后在标记库中可以有一个参数,将
枚举
表示为
字符串
(以获取其大小):

在本例中,我在枚举中硬编码了大小,但您也可以将这些值存储在
Config.groovy

编辑:

要从
Config.groovy
获取高度/宽度,请在文件中按如下方式添加每个值:

img.thumbnail.height=100
img.thumbnail.width=100
或者使用以下语法:

img{
    thumbnail{
        height=100
        width=100
    }
}
然后在enum类中注入
grailsApplication
服务:

def grailsApplication
并从配置文件中读取属性以初始化每个枚举:

enum ImgSizeEnum {
    THUMBNAIL(grailsApplication.config.img.thumbnail.height, grailsApplication.config.img.thumbnail.width),
...
}

这是一个很好的解决方案。现在,我如何将Config.groovy中的值放入enum声明:LARGE(myConfig.photo.height,myConfig.photo.width)?我已经添加了一个示例,说明如何从配置文件中获取这些值。Hmmm,我已经花了一个小时的时间来获取枚举以加载GrailApp。错误:在静态范围中找到明显的变量“grailsApplication”,但未引用局部变量、静态字段或类。可能原因:您试图引用绑定中的变量或静态上下文中的实例变量。您拼错了类名或静态导入的字段。请检查拼写。您试图使用方法“grailsApplication”,但在语法不允许的地方漏掉了括号。我正在编辑我的帖子,以包括整个班级。没关系,我认为这是一个不同的问题。它现在似乎起作用了。
enum ImgSizeEnum {
    THUMBNAIL(grailsApplication.config.img.thumbnail.height, grailsApplication.config.img.thumbnail.width),
...
}