我一直在考虑为一个项目提供图像托管服务,但我开始怀疑这对我的目标受众是否过于复杂,因为他们必须将所有图像上传到托管服务,然后将图像"附加"到CSS文件中使用托管服务提供的链接.虽然对于我们的开发人员来说这是一个相当简单的过程,但我认为这可能是让用户购买此功能的一大障碍.
我可以通过自己托管和提供图像来简化,但我担心可能出现的可扩展性问题,目前我没有硬件或带宽来处理.
我的想法是,我可以让用户将他们的图像和CSS上传到服务器的单个zip文件到Web服务器,然后可以从zip中提取文件,将图像推送到图像托管服务,以编程方式获取相应的URL从服务中获取并相应地更新CSS,然后将其附加到用户的显示配置文件.
这种方法可以一举杀死两只鸟,我不必担心因为在每个配置文件请求上提供潜在的大图像而导致的带宽问题,并且用户不必经历需要设置帐户的麻烦在图像托管服务.
有谁知道我可以编程集成的任何图像托管服务具有良好的可靠性和性能,可以帮助我解决这个难题?
提前致谢
我知道,有一个较早的帖子这里有同样的问题.但它在2012年被问到,答案也是几年前的答案.这也是关于Google+照片,我问的是Google相册
最近谷歌照片已经成为一项闪亮的新服务,新的公告是关于无限量上传照片(照片尺寸<16 MB).我目前正在上传到Google云端硬盘的服务.我查看了Google Developer网站,但没有找到任何与Google相关的内容.
那么新的Google相册是否有任何开放的API?有没有人有任何信息?我很感激你的意见.
有没有办法阅读Picasa数据库?
Picasa数据库的格式是什么?
有没有API可以访问数据库?
我正在使用内置的Android图像选择器,如下所示:
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
m_activity.startActivityForResult(photoPickerIntent, PHOTO_PICKER_ID);
Run Code Online (Sandbox Code Playgroud)
有没有办法限制它只显示本地可用的文件.在我的设备上,它目前正在拾取Picasa缩略图,我想要排除设备上实际不存在的所有图像.
我正在开展一项活动和相关任务,允许用户从图库中选择要用作其个人资料图片的图像.选择完成后,图像将通过其API上载到Web服务器.我有来自画廊的常规图像.但是,如果所选图像来自Picasa网络相册,则不会返回任何内容.
我做了很多调试,并将问题缩小到这个方法.
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
//cursor is null for picasa images
if(cursor!=null)
{
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
else return null;
}
Run Code Online (Sandbox Code Playgroud)
Picasa图片会返回一个空游标. MediaStore.Images.Media.DATA是不是空了他们,但是.它只返回一个#id,所以我猜测地址上没有实际的位图数据.Picasa图片是否本地存储在设备上?
我还从文档中注意到MediaStore.Images.ImageColumns.PICASA_ID存在.此值适用于所选的picasa图像,但不适用于其他图库图像.我想我可以使用此值来获取图像的URL,如果它不是本地存储但我无法在任何地方找到任何相关信息.
我发现创建Picasa专辑和上传图片的所有教程都使用了Zend Framework,我还没有研究过.
是否可以使用PHP和cURL上传图像和创建相册?
我的图像存储在目录中e:/images,图像信息存储在MySQL表中,如下所示:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE IF NOT EXISTS `picasaimage` (
`id` bigint(1) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`content` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`tags` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`license` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`image_path` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
`width` int(4) COLLATE utf8_unicode_ci NOT NULL,
`height` int(4) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0 ;
Run Code Online (Sandbox Code Playgroud)
我使用以下代码获取Google客户端身份验证代码:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, …Run Code Online (Sandbox Code Playgroud) 我正在尝试从Chrome扩展程序中将图像(使用元数据)发布到Picasa Webalbums.请注意,正如我在此处所述,Content-Type image/xyz的常规帖子有效.但是,我希望包含描述/关键字,协议规范描述了带有XML和数据部分的多部分/相关格式.
我通过HTML5 FileReader和用户文件输入获取数据.我使用检索二进制字符串
FileReader.readAsBinaryString(file);
Run Code Online (Sandbox Code Playgroud)
一旦FileReader加载了字符串,假设这是我的回调代码:
function upload_to_album(binaryString, filetype, albumid) {
var method = 'POST';
var url = 'http://picasaweb.google.com/data/feed/api/user/default/albumid/' + albumid;
var request = gen_multipart('Title', 'Description', binaryString, filetype);
var xhr = new XMLHttpRequest();
xhr.open(method, url, true);
xhr.setRequestHeader("GData-Version", '3.0');
xhr.setRequestHeader("Content-Type", 'multipart/related; boundary="END_OF_PART"');
xhr.setRequestHeader("MIME-version", "1.0");
// Add OAuth Token
xhr.setRequestHeader("Authorization", oauth.getAuthorizationHeader(url, method, ''));
xhr.onreadystatechange = function(data) {
if (xhr.readyState == 4) {
// .. handle response
}
};
xhr.send(request);
}
Run Code Online (Sandbox Code Playgroud)
gen_multipart函数只是从输入值和XML模板生成多部分,并生成与规范完全相同的输出(除了..binary图像数据..),但为了完整起见,这里是:
function gen_multipart(title, …Run Code Online (Sandbox Code Playgroud) 我正在使用ACTION_PICK意图从图库中选择一个图像.一些专辑,如"帖子","个人资料照片"等,都标有Picasa图标.对于来自此类相册的图片,我得到一个类似于此的URI:
content://com.google.android.gallery3d.provider/picasa/item/5769844615871490082
Run Code Online (Sandbox Code Playgroud)
我可以使用ContentResolver并且BitmapFactory没有问题从这个URI加载图像:
final InputStream ist = context.getContentResolver().openInputStream(intent.getData());
final Bitmap bitmap = BitmapFactory.decodeStream(ist);
Run Code Online (Sandbox Code Playgroud)
但是在重新启动应用程序后,我无法使用存储的URI加载图像.我打电话的时候decodeStream()会得到这个:
03-11 12:34:56.502: A/libc(1172): Fatal signal 11 (SIGSEGV) at 0x00000408 (code=1), thread 1462 03-11 12:34:56.502:
W/ActivityManager(478): Permission Denial: opening provider
com.android.gallery3d.provider.GalleryProvider from
ProcessRecord{41cdd220 1172:com.mycompany.myapp/u0a10085}
(pid=1172, uid=10085) requires
com.google.android.gallery3d.permission.GALLERY_PROVIDER or
com.google.android.gallery3d.permission.GALLERY_PROVIDER
Run Code Online (Sandbox Code Playgroud)
我试着补充一下
<uses-permission android:name="com.google.android.gallery3d.permission.GALLERY_PROVIDER"/>
Run Code Online (Sandbox Code Playgroud)
清单文件,但它没有帮助.
我认为我的问题类似于这个,但没有解决方案,只有一个解决方法.是否可以请求访问存储的URI的权限?
android picasa android-intent android-contentresolver android-contentprovider
使用Picasa Web API我从我的Google+相册中检索照片并尝试更改时间戳(手机上的时间错误,因此尝试修复):
var service = new PicasaService("exampleCo-exampleApp-1");
service.setUserCredentials("uid", "pwd");
AlbumQuery query = new AlbumQuery(PicasaQuery.CreatePicasaUri("default"));
PicasaFeed feed = service.Query(query);
var entry = (PicasaEntry)feed.Entries.SingleOrDefault(f => f.Title.Text == "Trip to Italy - ALL");
var ac = new AlbumAccessor(entry);
var photoQuery = new PhotoQuery(PicasaQuery.CreatePicasaUri("default", ac.Id));
PicasaFeed photoFeed = service.Query(photoQuery);
PicasaEntry picasaEntry = photoFeed.Entries[0];
ulong timestamp = Convert.ToUInt64(picasaEntry.GetPhotoExtensionValue("timestamp"));
// deduct 9 hours
DateTime dt = FromUnixTime(pa.Timestamp).AddHours(-9);
picasaEntry.SetPhotoExtensionValue("timestamp", Convert.ToString(ToUnixTime(dt)));
var updatedEntry = (PicasaEntry) picasaEntry.Update();
Run Code Online (Sandbox Code Playgroud)
不幸的是,当.Update方法成功时,时间戳不会改变.我也试图改变照片的时区(例如,用户手动操作同样的事情,如http://i.imgur.com/pxYSi9S.png).
我错过了一些简单的事吗?还有另一种方法可以完成同样的事情吗?我也愿意改变照片的时区.
我使用Google相册上传工具上传了大约4万张照片,现在我正在尝试使用Picasa网络相册数据API获取这些照片的列表(因为我没有单独的Google相册API) .
到目前为止,似乎无法获得所有照片的完整列表,因为您一次只能列出1000张照片,然后使用start-index参数进行分页,但是一旦您使用了启动,服务器就会返回错误索引大于11000.如果起始索引为11000,则会发生这种情况:
gdata.photos.service.GooglePhotosException:(500,'内部服务器错误','不推荐的偏移对于流ID查询而言太大.请切换到使用简历令牌.')
(我正在使用Python,但已确认该错误与语言库无关)
我很乐意切换到使用"恢复令牌",如错误指示...除了在我能找到的任何文档中都没有提到它们.
这是经过身份验证的请求,我使用的URL如下所示:
任何人都可以使用简历令牌向我显示示例请求或指向我的文档吗?或者,如果有人知道其他方式来获得大型相册中所有照片的完整列表,那也会很棒.谢谢!
编辑:问题发生在任何语言中,但在Python中,您可以一致地重现它:
startIndex = 1
while 1:
print '(fetching more photos)'
photos = client.GetFeed(ALBUM_URL, limit=1000, start_index=startIndex)
for photo in photos.entry:
print 'startIndex:', startIndex
startIndex += 1
Run Code Online (Sandbox Code Playgroud)
其中ALBUM_URL与我上面列出的URL类似,client是gdata.photos.service.PhotosService的经过身份验证的实例.
picasa ×10
android ×3
image ×2
api ×1
c# ×1
database ×1
gdata ×1
google-plus ×1
hosting ×1
javascript ×1
photobucket ×1
photos ×1
php ×1
picker ×1