Titanium - 将图片发送到服务器:文件大小错误
Titanium - Send picture to server : file size bug
我想将图片从我的应用程序(iOS 和 Android)发送到我的服务器。我的代码适用于小图片,但如果尺寸太大,当我发送数据时,没有任何反应并且应用程序变慢。
你能解释一下我的代码中的问题以及如何解决吗?非常感谢:)
这是我的代码:
var attached_media = [];
var file_btn = Ti.UI.createButton({ title: L('select') });
file_btn.addEventListener('click',function(e){
Titanium.Media.showCamera({
success:function(e) {
if(e.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) {
attached_media.push(Ti.Utils.base64encode(e.media).text);
}
},
saveToPhotoGallery:true,
allowEditing: false,
mediaTypes: [Ti.Media.MEDIA_TYPE_PHOTO]
});
});
var send_button = Titanium.UI.createButton({
title: 'Send',
});
send_button.addEventListener('click',function(e){
var req = ......
req.send({ 'medias':JSON.stringify(attached_media), 'user_id':Ti.App.Properties.getInt('user_id')});
});
我删除了不必要的代码,因为它太长了! :)
根据提供的信息,我了解到您在上传大尺寸照片时遇到了问题,例如来自相机的照片超过 2-3MB。
目前我可以建议你的唯一解决方案是在保存之前使用此 iOS-Android 模块 Ti-ImageFactory 压缩图像或者发送到服务器。
我建议您在相机的成功回调中拍摄图像后立即压缩,如下所示:
file_btn.addEventListener('click',function(e){
Titanium.Media.showCamera({
success:function(e) {
if(e.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) {
Ti.API.info("Initial pic bytes = " + e.media.length);
// if bytes length of pic is larger than 3MB or 3145728 bytes, set compression to 0.5,
// else keep it to default which is 0.7
var imf = require('ti.imagefactory');
var compressedPic = (e.media.length > 3145728) ? imf.compress(0.5) : imf.compress();
attached_media.push(Ti.Utils.base64encode(compressedPic).text);
Ti.API.info("Compressed pic bytes = " + compressedPic.length);
compressedPic = null;
}
},
saveToPhotoGallery:true,
allowEditing: false,
mediaTypes: [Ti.Media.MEDIA_TYPE_PHOTO]
});
});
已添加代码 - 如果捕获的图片大小超过 3MB,则按 0.5 级别压缩,否则使用默认级别压缩0.7。同时检查初始图片大小和压缩图片大小,以根据应用对更快上传的要求匹配更好的结果。
您还可以在 compress() 方法中传递压缩级别。有关更多信息,请参阅文档。
我想将图片从我的应用程序(iOS 和 Android)发送到我的服务器。我的代码适用于小图片,但如果尺寸太大,当我发送数据时,没有任何反应并且应用程序变慢。 你能解释一下我的代码中的问题以及如何解决吗?非常感谢:)
这是我的代码:
var attached_media = [];
var file_btn = Ti.UI.createButton({ title: L('select') });
file_btn.addEventListener('click',function(e){
Titanium.Media.showCamera({
success:function(e) {
if(e.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) {
attached_media.push(Ti.Utils.base64encode(e.media).text);
}
},
saveToPhotoGallery:true,
allowEditing: false,
mediaTypes: [Ti.Media.MEDIA_TYPE_PHOTO]
});
});
var send_button = Titanium.UI.createButton({
title: 'Send',
});
send_button.addEventListener('click',function(e){
var req = ......
req.send({ 'medias':JSON.stringify(attached_media), 'user_id':Ti.App.Properties.getInt('user_id')});
});
我删除了不必要的代码,因为它太长了! :)
根据提供的信息,我了解到您在上传大尺寸照片时遇到了问题,例如来自相机的照片超过 2-3MB。
目前我可以建议你的唯一解决方案是在保存之前使用此 iOS-Android 模块 Ti-ImageFactory 压缩图像或者发送到服务器。
我建议您在相机的成功回调中拍摄图像后立即压缩,如下所示:
file_btn.addEventListener('click',function(e){
Titanium.Media.showCamera({
success:function(e) {
if(e.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) {
Ti.API.info("Initial pic bytes = " + e.media.length);
// if bytes length of pic is larger than 3MB or 3145728 bytes, set compression to 0.5,
// else keep it to default which is 0.7
var imf = require('ti.imagefactory');
var compressedPic = (e.media.length > 3145728) ? imf.compress(0.5) : imf.compress();
attached_media.push(Ti.Utils.base64encode(compressedPic).text);
Ti.API.info("Compressed pic bytes = " + compressedPic.length);
compressedPic = null;
}
},
saveToPhotoGallery:true,
allowEditing: false,
mediaTypes: [Ti.Media.MEDIA_TYPE_PHOTO]
});
});
已添加代码 - 如果捕获的图片大小超过 3MB,则按 0.5 级别压缩,否则使用默认级别压缩0.7。同时检查初始图片大小和压缩图片大小,以根据应用对更快上传的要求匹配更好的结果。
您还可以在 compress() 方法中传递压缩级别。有关更多信息,请参阅文档。