Titanium Alloy:将视图作为图像保存到照片库?
Titanium Alloy: Saving a View as image to the photoGallery?
所以我目前有一个 window 和一个视图 (id="newPhoto"),我在其中放置了上一步的图像。在这个新的照片视图上,我通过 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.");
}
});
}
在此先感谢您看一看!
我在我的一个项目中遇到了类似的问题。我把我需要的区域截图了作为新图。
//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。它需要不同的参数,具体取决于您使用的平台。
请注意,我不需要将图像保存到图库中,因此必须另外完成(尽管您似乎已经知道如何执行此操作)。
好的...找到了。需要将其另存为 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.");
}
});
}
再次感谢罗宾。
所以我目前有一个 window 和一个视图 (id="newPhoto"),我在其中放置了上一步的图像。在这个新的照片视图上,我通过 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.");
}
});
}
在此先感谢您看一看!
我在我的一个项目中遇到了类似的问题。我把我需要的区域截图了作为新图。
//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。它需要不同的参数,具体取决于您使用的平台。
请注意,我不需要将图像保存到图库中,因此必须另外完成(尽管您似乎已经知道如何执行此操作)。
好的...找到了。需要将其另存为 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.");
}
});
}
再次感谢罗宾。