钛合金:将视图保存为照片库的图像?

时间:2015-03-05 20:16:16

标签: ios image titanium appcelerator titanium-alloy

所以我目前有一个带有视图的窗口(id =“newPhoto”),我在其中放置了上一步的图像。在这个新的Photo-view上,我通过css定位一个新视图(id =“content”),上面有一个图标和一些文本。 然后我想将父视图与图像以及图标和文本一起保存为photoGallery的新图像。什么是最简单的方法?将所有视图放在一个视图中并保存新视图,或截取所需部分并保存? 无法使其发挥作用:(

我的filterWindow.xml文件:

<Alloy>
    <Window id="filterWindow">

       <View id="finalImage" /> 
            <View id="selectedPhoto" />
            <View id="counter">
                <ImageView id="weatherIcon" />
                <Label id="label" />
            </View>

        <Button id="filterAndSaveBtn" onClick="filterAndSave">Filter</Button>

    </Window>
</Alloy>

我的filterWindow.js:

var photo = Alloy.createController('photo').getView();

$.selectedPhoto.add(photo);
$.selectedPhoto.width = appWidth;
$.selectedPhoto.height = appWidth;

$.label.text = "Some text";

function filterAndSave(e) {
    var blob = $.finalImage.toBlob();
    Ti.Media.saveToPhotoGallery(blob,{
        success: function(e){
            alert('Saved image to gallery');
        },
        error: function(e){
            alert("Error trying to save the image.");
        }
    });
}

提前感谢您查看此内容!

2 个答案:

答案 0 :(得分:1)

我的一个项目中有类似的问题。我制作了我需要的区域的截图作为新图片。

//This should be put in your filterAndSave method
if (Ti.Platform.osname == "android") {
    var image = $.imageContainer.toImage().media;
} else {
    var image = $.imageContainer.toImage(null, true);
}

//Saving the image if it is needed somewhere else
var f = Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory, "finalChallengeImage.jpeg");
f.write(image);
//Save it to the gallery and do what has to be done

您应该查看toImage()函数的official documentation。根据您使用的平台,它需要不同的参数。

请注意,我不需要将图像保存到图库中,因此必须另外完成(尽管您似乎已经知道如何执行此操作)。

答案 1 :(得分:0)

好的......找到了。需要将其另存为png文件,否则它会将重叠元素的背景设置为白色,尽管它的高度较小。但无论如何......作为一个png工作。但是只在iOS中尝试过。

所以这是最终的工作代码:

filterWindow.xml:

<View id="finalImage">
    <View id="selectedPhoto" />
    <View id="counter">
        <ImageView id="weatherIcon" />
        <Label id="label" />
    </View>
</View>

filterWindow.js:

var photo = Alloy.createController('photo').getView();

// adding the selected photo from the previous step into the first child-View
$.selectedPhoto.add(photo);

$.selectedPhoto.width = appWidth;
$.selectedPhoto.height = appWidth;

$.finalImage.width = appWidth;
$.finalImage.height = appWidth; 

$.label.text = "Some text";

function filterAndSave(e) {
    if (Ti.Platform.osname == "android") {
        var image = $.finalImage.toImage().media;
    } else {
        var image = $.finalImage.toImage(null, true);
    }

    //Saving the image if it is needed somewhere else
    var f = Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory, "finalImage.png");
    f.write(image);

    //Save it to the gallery
    Ti.Media.saveToPhotoGallery(image,{
        success: function(e){
            alert('Saved image to gallery');
        },
        error: function(e){
            alert("Error trying to save the image.");
        }
    });
}

再一次,非常感谢你,罗宾。