我正在使用Web客户端类从Internet下载文件(实际上是Flickr).只要我使用这个就可以正常工作:WebClient().DownloadData(string) 但是这会锁定UI,因为它不是异步的.
但是,当我尝试时WebClient().DownloadDatAsync(string),我得到一个编译错误:"无法将System.String转换为System.Uri".
字符串MediumUrl返回 "http://farm4.static.flickr.com/2232/2232/someimage.jpg"
所以问题是如何将字符串转换"http://farm4.static.flickr.com/2232/2232/someimage.jpg"为Uri.
我尝试过的事情 -
我试过了Uri myuri = new uri(string)- 如上所述的错误.
foreach (Photo photo in allphotos)
{
//Console.WriteLine(String.Format("photo title is :{0}", photo.Title));
objimage = new MemoryStream(wc.DownloadData(photo.MediumUrl));
images.Add(new Pictures(new Bitmap(objimage), photo.MediumUrl, photo.Title));
}
Run Code Online (Sandbox Code Playgroud)我正在开发一款Android应用,可以显示从Flickr下载的照片.我从字节数组中获取一个位图对象,然后从相关的Flickr URL中读取,如下所示:
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inDither = true;
opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, opt);
Run Code Online (Sandbox Code Playgroud)
然后我将位图绘制到View对象的onDraw方法的画布上:
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
canvas.drawBitmap(bitmap, 0, 0, paint);
Run Code Online (Sandbox Code Playgroud)
问题是得到的图像是像素化的,我无法弄清楚为什么; 我已经尝试了一些opt和paint对象的变种而没有运气.我的应用程序中显示的图片与原始URL中的图片之间的差异大致由以下内容证明:
图片不好,请参见左上角的像素化http://homepages.inf.ed.ac.uk/s0677975/bad.jpg
好照片,这是预期的结果http://homepages.inf.ed.ac.uk/s0677975/good.jpg
看看例如在左上角的云层中看到差异.
请注意,从项目资源加载并以类似方式绘制的JPEG图片显示正常,即没有像素化.
谁能给我一个暗示为什么会这样?
为了详细说明,字节数组是从Flickr获得的,如下所示; 这是基于Romain Guy的Photostream应用程序的代码:
InputStream in = new BufferedInputStream(url.openStream(), IO_BUFFER_SIZE);
final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE);
copy(in, out);
out.flush();
final byte[] data = dataStream.toByteArray();
Run Code Online (Sandbox Code Playgroud)
PS:我还在android.developer Google小组上发布了这个问题的变体.
非常感谢你的建议 - 现在我真的很困惑!我按照你的建议做了,发现直接从下载的字节数组得到的图像确实是像素化的.但是,这是从完全相同的URL下载的,当在我的计算机上访问时,该URL不是像素化的.这是相应的Flickr URL:
http://farm3.static.flickr.com/2678/4315351421_54e8cdb8e5.jpg
更奇怪的是,当我在模拟器中而不是在我的手机(HTC Hero)上运行相同的应用程序时,没有像素化.
这怎么可能呢?
下面是我用来从URL加载位图的代码 - 它基于Romain …
我试图从Flickr获取一个指定的集合,然后使用JSON和REST API显示该集合中的图像.这是我正在使用的代码:
$.getJSON("http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key=xxx&set=72157623858739780&format=json&jsoncallback=?", function(data){
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
});
});
Run Code Online (Sandbox Code Playgroud)
我从示例中删除了api密钥.带有我的密钥的网址,在我的网络浏览器中输入时,会返回以下错误:
jsonFlickrApi({"stat":"fail", "code":1, "message":"Photoset not found"})
Run Code Online (Sandbox Code Playgroud)
我知道set id是正确的,导航到http://www.flickr.com/photos/23892838@N07/sets/72157623858739780/工作正常.
UPDATE
我设法把事情搞定了.这是我修改后的代码,以防其他人试图弄明白.
function FlickrPhotoSet(){
//SET API CALL BASED ON INPUT
var apiCall = "http://api.flickr.com/services/rest/?format=json&method=flickr.photosets.getPhotos&photoset_id=THESET&per_page=10&page=1&api_key=XXX&jsoncallback=?";
//PRINT API CALL (DEBUG)
$("<span>").html(apiCall+"<br>").appendTo("body");
//SEND API CALL AND RETURN RESULTS TO A FUNCTION
$.getJSON(apiCall, function(data){
//LOOP THROUGH DATA
$.each(data.photoset.photo, function(i,photo){
//LINK TO IMAGE SOURCE
var img_src = "http://farm" + photo.farm + ".static.flickr.com/" + photo.server + "/" + photo.id + "_" + photo.secret + "_" + …Run Code Online (Sandbox Code Playgroud) 我们想模拟Imagemagick功能,但仅限于Javascript.存在任何库吗?
具体而言,目标是显示图像的缩略图而不将缩略图扭曲到几乎不像原始图像的点.这通常通过CSS简单调整大小来实现.
一种方法是使用Imagemagick调整服务器上的图像大小.
问题是,如果我们不想存储缩略图(因为原件是从不提供缩略图的第三方加载的),我们可以使用Javascript库模拟Imagemagick的自然和高保真调整大小功能吗?
谢谢!
我正在尝试使用Flickr API创建一个非常基本的Flickr库.我想要实现的是按照标签对照片进行排序.我正在使用的是jQuery.getJSON(),以便我可以解析flickr.photosets.getPhotos的API响应.
我有兴趣从Flickr获取的数据是标签和与每张照片相关联的URL.这个问题的唯一逻辑方法就是创建一个以下格式的多维数组:
Array['tag1'] => ['URL_1', 'URL_2', 'URL_3', 'URL_n'];
Run Code Online (Sandbox Code Playgroud)
但是,我找不到任何方法来实现这一目标.我的代码看起来像这样:
$.getJSON('http://api.flickr.com/services/rest/?api_key=xxx&method=flickr.photosets.getPhotos&user_id=xxx&format=json&extras=tags%2C+url_l%2C+url_sq&nojsoncallback=1&photoset_id=xxx',
function(data) {
var imageArray = [];
$.each(data.photoset.photo, function(i, item) {
imageArray[item.tags] = [item.url_sq,];
});
});
Run Code Online (Sandbox Code Playgroud)
我知道代码可能看起来很尴尬,但我已经尝试了所有的东西,我无法解决这个问题.
我想保存一些我的网站每月带宽分配,我想知道我是否可以使用Flickr PRO或我应该依靠Amazon S3作为我的网站图像的托管服务.(我的Web应用程序允许用户上传他们自己的图片,目前它正在管理大约40GB的数据)
我从未使用过亚马逊的服务,我喜欢使用Flickr REST Api的想法从我的webApp动态上传图像.
我也喜欢几乎无限空间在Flickr上存储图像只需25美元/年,但我不确定我是否可以在我的网站上使用他们的服务.
我认为如果我使用Flickr服务存储图像(由我的网站用户上传),我的帐户可以被禁止,这不仅仅是为了"个人使用".
您的体验是什么?您会建议其他服务而不是亚马逊的S3,或者这是目前唯一可用的选项吗?
谢谢
编辑:Flickr明确地说' 不要将Flickr用于商业目的 ',你总是可以联系他们要求评估你的请求,但听起来我觉得我不能用他们的服务来实现我想要的.S3看起来就像那样......
即使粗略估计我每个月要花的钱仍然很吓人
5000 visit/day
* 400 img/user (avg 50kB/image)
* 30 days
= ~3TB of traffic
* 0.15$/GB (Amazon S3)
= 429$/month
Run Code Online (Sandbox Code Playgroud)
有没有更便宜的地方来托管我的照片?
我想使用Flickr API在Android手机上下载图像,任何人都可以给我或告诉我关于Andorid上Flickr API的工作样本.
我已经添加了flickr.jar作为外部库,我有"密钥"和"秘密",但我不知道如何下载图像.
一些流行的词汇,如"食物",在世界各地被用作借词.
我试图用来flickr.photos.search从一种特定的语言或地区获取照片.我没有在http://www.flickr.com/services/api/flickr.photos.search.html找到这方面的设置
我尝试了这两种方法,但都没有奏效:
我在谷歌搜索过,发现YQL可以按位置搜索.(我将以另一种方式使用YQL,过多的呼叫将限制在api上.)
我还发现在flickr.photos.search一个可以设置一个lat,, lon和radius,但是范围是一个圆圈,所以这不会限制搜索到特定国家.
这些都不是我的好选择.有人可以帮忙吗?
我正在使用Flickr的REST API,它工作正常.通过这个,我的意思是我正在对Flickr API进行AJAX调用并获取JSON对象,解析对象等.
但这引起了我的疑问.如果浏览器遵循同源策略,那么他们如何制作这些类型的API请求呢?
这个DEMO小提琴正在工作,但它向Flickr域发送跨域请求.
这个跨域请求如何工作?
跨域请求:
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?id=" +
id + "&lang=en-us&format=json&jsoncallback=1");
Run Code Online (Sandbox Code Playgroud) 我试图允许用户使用FlickrNet库/ API从Asp.net应用程序上传视频到Flickr.我从Flickr获得了API密钥和API秘密.另外,我正在使用FlickrNet库中的AuthGetFrob方法检索authToken.
我的使用陈述如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FlickrNet;
Run Code Online (Sandbox Code Playgroud)
我创建了两种方法来完成这项任务.
获取并返回AuthToken的一个
private string GetAuthenticateToken()
{
Flickr flickr = new Flickr(FLICKR_API_KEY, FLICKR_API_SECRET);
string frob = flickr.AuthGetFrob();
return flickr.AuthCalcUrl(frob, AuthLevel.Write);
}
Run Code Online (Sandbox Code Playgroud)
一个使用AuthToken上传文件
public void UploadFile(string fileName, string title, string description)
{
try
{
string authToken = GetAuthenticateToken();
Flickr flickr = new Flickr(FLICKR_API_KEY, FLICKR_API_SECRET, authToken);
string photoId = flickr.UploadPicture(fileName, title, description, "", true, false, false);
}
catch (Exception ex)
{
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我调用'UploadPicture'时,会抛出以下异常.'无效的身份验证令牌(98)'.
AuthRequest Http请求的内容如下所示.
<?xml version="1.0" …Run Code Online (Sandbox Code Playgroud) flickr ×10
android ×2
c# ×2
javascript ×2
jquery ×2
amazon-s3 ×1
api ×1
arrays ×1
asp.net ×1
cross-domain ×1
hosting ×1
image ×1
imagemagick ×1
json ×1
photoshop ×1