4

ここ数日、Groovy と Grails を使い始めたばかりです。私は Java の経験がないので、この (おそらく) 非常に基本的な質問を許していただく必要があります。Google と Stack Overflow を検索しましたが、実際のインストールに役立つものは見つかりませんでした。

画像のアップロードが機能しており、ファイルをサーバーに保存しています。IBM Grails チュートリアルを使用してガイドしました。それはうまくいきます。

また、ファイルのサイズを大、中、小の形式で変更したいと考えています。これに imgscar を使用したかったのですが、うまくいきません。さまざまな .jar ファイルを含むバージョン 4.2 をダウンロードしました。これらをサーバーのどこかに置いて参照する必要がありますか? 私が行った唯一のことは、これらの行をに追加することですbuildConfig.groovy

dependencies {
    // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes eg.

    // runtime 'mysql:mysql-connector-java:5.1.20'
    compile 'org.imgscalr:imgscalr-lib:4.2'
}

そしてimport org.imgscalr.Scalr.*私の中でPhotoController.Groovy

ファイルをサーバーに保存するためのコードは次のとおりです。画像のサイズを変更して保存したいと思います。

def save() {
    def photoInstance = new Photo(params)

    // Handle uploaded file
    def uploadedFile = request.getFile('photoFile')
    if(!uploadedFile.empty) {
        println "Class: ${uploadedFile.class}"
        println "Name: ${uploadedFile.name}"
        println "OriginalFileName: ${uploadedFile.originalFilename}"
        println "Size: ${uploadedFile.size}"
        println "ContentType: ${uploadedFile.contentType}"

        def webRootDir = servletContext.getRealPath("/")

        def originalPhotoDir = new File(webRootDir, "/images/photographs/original")
        originalPhotoDir.mkdirs()
        uploadedFile.transferTo(new File(originalPhotoDir, uploadedFile.originalFilename))

        BufferedImage largeImg = Scalr.resize(uploadedFile, 1366);
        def largePhotoDir = new File(webRootDir, "/images/photographs/large")
        largePhotoDir.mkdirs()

        photoInstance.photoFile = uploadedFile.originalFilename
    }

    if (!photoInstance.hasErrors() && photoInstance.save()) {
        flash.message = "Photo ${photoInstance.id} created"
        redirect(action:"list")
    }
    else {
        render(view:"create", model:[photoInstance: photoInstance])
    }
}

私が得ているエラーはNo such property: Scalr for class: garethlewisweb.PhotoController

私は明らかに非常に悪いことをしています。任意のガイダンスをいただければ幸いです。

4

3 に答える 3

1

それ以外の

import org.imgscalr.Scalr.*

あなたがしたい

import org.imgscalr.Scalr
import javax.imageio.ImageIO

次に、 (JavaDocsresizeを見て)が必要なので、試してください:BufferedImage

    def originalPhotoDir = new File(webRootDir, "/images/photographs/original")
    originalPhotoDir.mkdirs()
    def originalPhotoFile = new File(originalPhotoDir, uploadedFile.originalFilename)
    uploadedFile.transferTo( originalPhotoFile )

    // Load the image
    BufferedImage originalImage = ImageIO.read( originalPhotoFile )
    // Scale it
    BufferedImage largeImg = Scalr.resize(uploadedFile, 1366);

    // Make the destination folder
    def largePhotoDir = new File(webRootDir, "/images/photographs/large" )
    largePhotoDir.mkdirs()

    // Write the large image out
    ImageIO.write( largeImg, 'png', new File( largePhotoDir, uploadedFile.originalFilename )

もちろん、既存の画像を上書きするファイルに注意する必要があります

于 2013-01-18T13:14:41.620 に答える