Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;java.lang.OutOfMemoryError:java堆空间;在ColdFusion 11中使用ImageReadBase64()读取大图像时_Java_Image Processing_Coldfusion_Base64_Coldfusion 11 - Fatal编程技术网

&引用;java.lang.OutOfMemoryError:java堆空间;在ColdFusion 11中使用ImageReadBase64()读取大图像时

&引用;java.lang.OutOfMemoryError:java堆空间;在ColdFusion 11中使用ImageReadBase64()读取大图像时,java,image-processing,coldfusion,base64,coldfusion-11,Java,Image Processing,Coldfusion,Base64,Coldfusion 11,我在ColdFusion 11中构建了一个简单的RESTAPI,它允许我们的供应商更新产品信息。它们发送的大多数数据(大约30个属性)都是简单的值——字符串和数字。一个属性是表示图像文件的Base64编码字符串。RESTAPI更新数据库中的简单数据值,然后读取图像并将其大小调整为适合在网站上使用的4个大小。我注意到,供应商偶尔会发送带有一些请求(20MB+)的大型图像,这些请求通常会在调用ImageReadBase64()函数的行上产生“java.lang.OutOfMemoryError:ja

我在ColdFusion 11中构建了一个简单的RESTAPI,它允许我们的供应商更新产品信息。它们发送的大多数数据(大约30个属性)都是简单的值——字符串和数字。一个属性是表示图像文件的Base64编码字符串。RESTAPI更新数据库中的简单数据值,然后读取图像并将其大小调整为适合在网站上使用的4个大小。我注意到,供应商偶尔会发送带有一些请求(20MB+)的大型图像,这些请求通常会在调用
ImageReadBase64()
函数的行上产生“java.lang.OutOfMemoryError:java heap space”。我们在这台服务器上运行了其他web应用程序,似乎处理这些图像时被锁定的内存也会导致这些应用程序出现问题。我试图找出我在代码中是否可以做些什么来减少这些问题,即使它找到了一种方法,在图像“太大”(超过一定大小)时不处理它们。以下是为处理图像而运行的所有代码:

public struct function getDimensionsToEnlarge(
    required numeric imageWidth,
    required numeric imageHeight,
    required numeric minWidth,
    required numeric minHeight
    ) {
    LOCAL.Dimensions={
        width=-1,
        height=-1
        };

    if  (   ARGUMENTS.minHeight > 0
        &&  ARGUMENTS.minWidth > 0
        &&  ARGUMENTS.imageHeight < ARGUMENTS.minHeight
        &&  ARGUMENTS.imageWidth < ARGUMENTS.minWidth
        ) {
        LOCAL.Dimensions.width=ARGUMENTS.minWidth;
        LOCAL.Dimensions.height=ARGUMENTS.minHeight;
    }

    return LOCAL.Dimensions;
}

public struct function getDimensionsToShrink(
    required numeric imageWidth,
    required numeric imageHeight,
    required numeric maxWidth,
    required numeric maxHeight
    ) {
    LOCAL.Dimensions={
        width=-1,
        height=-1
        };

    if  (   ARGUMENTS.maxHeight > 0
        &&  ARGUMENTS.maxWidth > 0
        &&  (   ARGUMENTS.imageHeight > ARGUMENTS.maxHeight
            ||  ARGUMENTS.imageWidth > ARGUMENTS.maxWidth
            )
        ) {
        LOCAL.Dimensions.width=ARGUMENTS.maxWidth;
        LOCAL.Dimensions.height=ARGUMENTS.maxHeight;
    }

    return LOCAL.Dimensions;
}

public struct function getDimensionsToFit(
    required numeric imageWidth,
    required numeric imageHeight,
    required numeric minWidth,
    required numeric minHeight,
    required numeric maxWidth,
    required numeric maxHeight
    ) {
    LOCAL.Dimensions={
        width=-1,
        height=-1
        };

    LOCAL.Dimensions =
        getDimensionsToEnlarge(
            imageHeight=ARGUMENTS.imageHeight,
            imageWidth=ARGUMENTS.imageWidth,
            minWidth=ARGUMENTS.minWidth,
            minHeight=ARGUMENTS.minHeight
            );

    if (LOCAL.Dimensions.width < 0 && LOCAL.Dimensions.height < 0)
        LOCAL.Dimensions =
            getDimensionsToShrink(
                imageHeight=ARGUMENTS.imageHeight,
                imageWidth=ARGUMENTS.imageWidth,
                maxWidth=ARGUMENTS.maxWidth,
                maxHeight=ARGUMENTS.maxHeight
                );

    return LOCAL.Dimensions;
}

public any function scale(
    required any image,
    string action="fit",
    numeric minWidth=-1,
    numeric minHeight=-1,
    numeric maxWidth=-1,
    numeric maxHeight=-1
    ) {
    LOCAL.Dimensions={
            width=-1,
            height=-1
        };
    LOCAL.Image=Duplicate(ARGUMENTS.image);

    switch (ARGUMENTS.action) {
        case "shrink":
            LOCAL.Dimensions =
                getDimensionsToShrink(
                    imageHeight=LOCAL.Image.getHeight(),
                    imageWidth=LOCAL.Image.getWidth(),
                    maxWidth=ARGUMENTS.maxWidth,
                    maxHeight=ARGUMENTS.maxHeight
                );

            break;
        case "enlarge":
            LOCAL.Dimensions =
                getDimensionsToEnlarge(
                    imageHeight=LOCAL.Image.getHeight(),
                    imageWidth=LOCAL.Image.getWidth(),
                    minWidth=ARGUMENTS.minWidth,
                    minHeight=ARGUMENTS.minHeight
                );

            break;
        default:
            LOCAL.Dimensions =
                getDimensionsToFit(
                    imageHeight=LOCAL.Image.getHeight(),
                    imageWidth=LOCAL.Image.getWidth(),
                    minWidth=ARGUMENTS.minWidth,
                    minHeight=ARGUMENTS.minHeight,
                    maxWidth=ARGUMENTS.maxWidth,
                    maxHeight=ARGUMENTS.maxHeight
                );

            break;
    }

    if (LOCAL.Dimensions.width > 0 && LOCAL.Dimensions.height > 0) {
        ImageSetAntialiasing(LOCAL.Image, "on");

        ImageScaleToFit(
            LOCAL.Image,
            LOCAL.Dimensions.width,
            LOCAL.Dimensions.height
            );
    }

    return LOCAL.Image;
}

public void function createLargeThumbnail(required any image) {
    ImageWrite(
        scale(image=ARGUMENTS.image, maxHeight=500, maxWidth=700),
        getLargeImagePath(),
        0.75,
        true
        );

    return;
}

public void function createMediumThumbnail(required any image) {
    ImageWrite(
        scale(image=ARGUMENTS.image, maxHeight=300, maxWidth=300),
        getMediumImagePath(),
        0.75,
        true
        );

    return;
}

public void function createSmallThumbnail(required any image) {
    ImageWrite(
        scale(image=ARGUMENTS.image, maxHeight=50, maxWidth=50),
        getSmallImagePath(),
        0.75,
        true
        );

    return;
}

public void function createMobileThumbnail(required any image) {
    ImageWrite(
        scale(image=ARGUMENTS.image, maxHeight=50, maxWidth=300),
        getMobileImagePath(),
        0.75,
        true
        );

    return;
}

public void function createProductThumbnails(required any image) {
    createLargeThumbnail(argumentCollection=ARGUMENTS);
    createMediumThumbnail(argumentCollection=ARGUMENTS);
    createSmallThumbnail(argumentCollection=ARGUMENTS);
    createMobileThumbnail(argumentCollection=ARGUMENTS);

    return;
}

createProductThumbnails(ImageReadBase64(ARGUMENTS.ImageUpload));
公共结构函数GetDimensionsTo放大(
所需的数字图像宽度,
所需的数字图像高度,
所需的数字最小宽度,
所需数字最小高度
) {
局部尺寸={
宽度=-1,
高度=-1
};
如果(ARGUMENTS.minHeight>0
&&ARGUMENTS.minWidth>0
&&ARGUMENTS.imageHeight0
&&ARGUMENTS.maxWidth>0
&&(ARGUMENTS.imageHeight>ARGUMENTS.maxHeight
||ARGUMENTS.imageWidth>ARGUMENTS.maxWidth
)
) {
LOCAL.Dimensions.width=ARGUMENTS.maxWidth;
LOCAL.Dimensions.height=ARGUMENTS.maxHeight;
}
返回局部尺寸;
}
公共结构函数getDimensionsToFit(
所需的数字图像宽度,
所需的数字图像高度,
所需的数字最小宽度,
所需数字最小高度,
所需的数字maxWidth,
所需的数字最大高度
) {
局部尺寸={
宽度=-1,
高度=-1
};
局部尺寸=
获取尺寸并放大(
imageHeight=ARGUMENTS.imageHeight,
imageWidth=ARGUMENTS.imageWidth,
minWidth=ARGUMENTS.minWidth,
minHeight=ARGUMENTS.minHeight
);
if(LOCAL.Dimensions.width<0和LOCAL.Dimensions.height<0)
局部尺寸=
getDimensionsToShrink(
imageHeight=ARGUMENTS.imageHeight,
imageWidth=ARGUMENTS.imageWidth,
maxWidth=ARGUMENTS.maxWidth,
maxHeight=ARGUMENTS.maxHeight
);
返回局部尺寸;
}
公共功能量表(
需要任何图像,
string action=“fit”,
数值minWidth=-1,
数字最小高度=-1,
数值maxWidth=-1,
数值maxHeight=-1
) {
局部尺寸={
宽度=-1,
高度=-1
};
LOCAL.Image=重复(ARGUMENTS.Image);
开关(ARGUMENTS.action){
案例“收缩”:
局部尺寸=
getDimensionsToShrink(
imageHeight=LOCAL.Image.getHeight(),
imageWidth=LOCAL.Image.getWidth(),
maxWidth=ARGUMENTS.maxWidth,
maxHeight=ARGUMENTS.maxHeight
);
打破
案例“放大”:
局部尺寸=
获取尺寸并放大(
imageHeight=LOCAL.Image.getHeight(),
imageWidth=LOCAL.Image.getWidth(),
minWidth=ARGUMENTS.minWidth,
minHeight=ARGUMENTS.minHeight
);
打破
违约:
局部尺寸=
getDimensionsToFit(
imageHeight=LOCAL.Image.getHeight(),
imageWidth=LOCAL.Image.getWidth(),
minWidth=ARGUMENTS.minWidth,
minHeight=ARGUMENTS.minHeight,
maxWidth=ARGUMENTS.maxWidth,
maxHeight=ARGUMENTS.maxHeight
);
打破
}
如果(LOCAL.Dimensions.width>0&&LOCAL.Dimensions.height>0){
ImageSet抗锯齿(LOCAL.Image,“on”);
图像比例拟合(
本地图像,
局部尺寸、宽度、,
局部尺寸高度
);
}
返回本地图像;
}
public void函数createLargeThumbnail(任何图像都需要){
图像写入(
比例(image=ARGUMENTS.image,maxHeight=500,maxWidth=700),
getLargeImagePath(),
0.75,
真的
);
返回;
}
公共无效函数createMediumThumbnail(任何图像都需要){
图像写入(
比例(image=ARGUMENTS.image,maxHeight=300,maxWidth=300),
getMediumImagePath(),
0.75,
真的
);
返回;
}
public void函数createSmallThumbnail(任何图像都需要){
图像写入(
比例(image=ARGUMENTS.image,maxHeight=50,maxWidth=50),
getSmallImagePath(),
0.75,
真的
);
返回;
}
public void函数createMobileThumbnail(任何图像都需要){
图像写入(
比例(image=ARGUMENTS.image,maxHeight=50,maxWidth=300),
getMobileImagePath(),
0.75,
真的
);
R