如何从 Instagram API 获取裁剪后的图像?
Posted
技术标签:
【中文标题】如何从 Instagram API 获取裁剪后的图像?【英文标题】:How to get the cropped image from Instagram API? 【发布时间】:2015-11-05 09:44:24 【问题描述】:目前我得到这张图片:
https://scontent.cdninstagram.com/hphotos-xtp1/t51.2885-15/s320x320/e35/11950569_428157634035762_1539002513_n.jpg
但我想获得这个版本的图像:
https://igcdn-photos-b-a.akamaihd.net/hphotos-ak-xfp1/t51.2885-15/e35/c238.0.603.603/11856567_458440314342209_1536381871_n.jpg
这就是我构建 API URL 的方式:
var apiEndpoint = "https://api.instagram.com/v1";
function composeRequestURL()
var url = apiEndpoint,
params = ;
if (settings.next_url != null)
return settings.next_url;
if (settings.hash != null)
url += "/tags/" + settings.hash + "/media/recent";
else if (settings.search != null)
url += "/media/search";
params.lat = settings.search.lat;
params.lng = settings.search.lng;
settings.search.max_timestamp != null && (params.max_timestamp = settings.search.max_timestamp);
settings.search.min_timestamp != null && (params.min_timestamp = settings.search.min_timestamp);
settings.search.distance != null && (params.distance = settings.search.distance);
else if (settings.userId != null)
url += "/users/" + settings.userId + "/media/recent";
else if (settings.locationId != null)
url += "/locations/" + settings.locationId + "/media/recent";
else
url += "/media/popular";
settings.accessToken != null && (params.access_token = settings.accessToken);
settings.clientId != null && (params.client_id = settings.clientId);
settings.minId != null && (params.min_id = settings.minId);
settings.maxId != null && (params.max_id = settings.maxId);
settings.show != null && (params.count = settings.show);
url += "?" + $.param(params)
return url;
有什么建议可以得到那个裁剪的图像吗?非常感谢。
【问题讨论】:
【参考方案1】:是的,有建议获取裁剪后的图像。
您只需要知道图像的原始宽度和高度。
您可以在 url 中添加/cX.Y.W.H/
以裁剪图像。
例如:您的图片的原始尺寸为 1080x603。因此,要以正方形裁剪图像,我们需要得到 1080x1080 的正方形(带有空格)并将其裁剪为 603x603。
答案是:W=603,H=603,X=(1080-603)/2=238,Y=(1080-603)/2=238。
然后将/c238.238.603.603/
添加到url:
https://scontent.cdninstagram.com/hphotos-xtp1/t51.2885-15/s320x320/e35/c238.238.603.603/11950569_428157634035762_1539002513_n.jpg
那张图片是 320x320,所以要得到我们的正方形,只需删除一些变量,然后得到 url:
https://scontent.cdninstagram.com/hphotos-xtp1/c238.238.603.603/11950569_428157634035762_1539002513_n.jpg
UPD
如果您不知道图像的real original size
,API 会返回非方形图像的大小(激活它:管理客户端-> 编辑-> 迁移选项卡-> 检查Non square media
)。
例子:
链接:
https://api.instagram.com/v1/tags/nonsquare/media/recent?client_id=CLIENT-ID
来自答案:
...
images:
low_resolution:
url: "https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/e35/p320x320/10949090_860171600771180_267418389_n.jpg",
width: 320,
height: 400
,
thumbnail:
url: "https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/s150x150/e35/c0.135.1080.1080/10949090_860171600771180_267418389_n.jpg",
width: 150,
height: 150
,
standard_resolution:
url: "https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/sh0.08/e35/p640x640/10949090_860171600771180_267418389_n.jpg",
width: 640,
height: 800
...
在 url 中,我们添加 /pWxH/
以按小尺寸获取图像(/p640x640/
和实际原始尺寸 1080x1350 Instagram 返回图像 640x800)。您可以将此值 (640x800) 用作原始值来获得裁剪图像。
在这个例子中:
API 网址:
https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/sh0.08/e35/p640x640/10949090_860171600771180_267418389_n.jpg
原网址:
https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/sh0.08/e35/10949090_860171600771180_267418389_n.jpg
裁剪后的 (640x640) 网址:
https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/sh0.08/e35/p640x640/c0.80.640.640/10949090_860171600771180_267418389_n.jpg
裁剪(从 640x640 到 320x320)网址:
https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/sh0.08/e35/p640x640/c160.240.320.320/10949090_860171600771180_267418389_n.jpg
裁剪后的 (320x320) 网址:
https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/sh0.08/e35/p320x320/c0.40.320.320/10949090_860171600771180_267418389_n.jpg
【讨论】:
问题是instagram api没有返回图片的原始大小,知道吗?非常感谢 发现获得更高分辨率 s320x320 的缩略图是我所需要的。谢谢 @user782104 请参阅 UPD 以获取不知道原始尺寸的缩略图。以上是关于如何从 Instagram API 获取裁剪后的图像?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用新 API 从 Instagram 获取公共数据或标签?
如何在没有 instagram API 的情况下从 instagram 获取公共用户的所有帖子
如何从 instagram messenger webhook 获取 instagram 用户名