所以我目前有一个带有视图的窗口(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.");
}
});
}
提前感谢您查看此内容!
答案 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.");
}
});
}
再一次,非常感谢你,罗宾。