grails存储图像尺寸数据的位置

时间:2013-12-05 03:53:24

标签: 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 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调用的。

除了图像尺寸之外,这些方法非常相似,我还需要添加一些不同尺寸的方法。虽然我可以重构一个接受图像尺寸的方法,你会在哪里定义/传递这些尺寸?

- 将标签lib中的尺寸硬编码,并将它们传递给服务电话 - 在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
    }
}

1 个答案:

答案 0 :(得分:0)

存储图片大小的另一种方法是拥有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 }
}

然后在你的Taglib中你可以有一个代表enum的param作为String(为了获得它的大小):

ImgSizeEnum imgSizeEnum = ImgSizeEnum.valueOf("THUMBNAIL");
imgSizeEnum.getHeight()
imgSizeEnum.getWidth()

在此示例中,我在枚举中使用了硬编码的大小,但您也可以将这些值存储在Config.groovy中。

修改

要从Config.groovy获取高度/宽度,请添加文件中的每个值,如下所示:

img.thumbnail.height=100
img.thumbnail.width=100

或者使用以下语法:

img{
    thumbnail{
        height=100
        width=100
    }
}

然后在枚举类中注入grailsApplication服务:

def grailsApplication

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

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