通过URL生成随机图片

9

我有一个带有以下端点的API:

  • api/image/1 返回图像1
  • api/image/random 给我一个随机图像

每当我调用随机图像,比如在同一个网页上连续5次,每次得到的都是相同的图像。这有点像https://picsum.photos/seed/picsum/200/300...

我想要每次调用随机图像都得到不同的图像,即使在同一个网页上调用了10次。这是否有可能?


请问您能否分享您的代码,以便我们可以查看对API的调用以及API代码/文档? - User1010
要在此问题中进行编辑并提供示例:https://jsfiddle.net/k7a4vctL/ 前两张图片将始终相同:是否可能在我的API中使它们也真正随机? - user1141796
https://dilbert.com/strip/2001-10-25 - j08691
6个回答

20

issue所述,你基本上可以使用https://source.unsplash.com/random/200x200?sig=递增标识符

<img src="https://source.unsplash.com/random/200x200?sig=1" />
<img src="https://source.unsplash.com/random/200x200?sig=2" />
<img src="https://source.unsplash.com/random/200x200?sig=3" />


15
他们在文档中实际上解决了这个常见问题。有趣的是,你正在使用他们的建议来达到完全相反的效果:

静态随机图像
通过在URL开头添加/seed/{seed},基于种子获得相同的随机图像。

https://picsum.photos/seed/picsum/200/300

解决方案

根据Picsum的说法,您可以这样做:

为了在浏览器中请求多个相同大小的图像,请添加随机查询参数以防止图像被缓存: <img src="https://picsum.photos/200/300?random=1">
<img src="https://picsum.photos/200/300?random=2">

这将产生以下结果:

此外,您始终可以使用其API获取URL列表,它允许您定义图像数量等多种内容。我建议实际阅读他们在网站上发布的小指南。


在我看来,这样做更好。 - Pencilcheck

10
简单易用的API。每次都会将您重定向到一张随机图片。
URL

https://source.unsplash.com/random/300x200

语法

https://source.unsplash.com/random/<width>x<height>

这里有一个JS技巧,可以在每个请求中获取唯一的图片。

https://source.unsplash.com/random/300x200?sig=${Math.random()}


3
这是由于浏览器缓存引起的,因为您实际上正在请求相同的图像,可以在我的浏览器截图中看到这一点,

两行代码。

<img src="https://picsum.photos/200/300">
<img src="https://picsum.photos/200/300">

一个服务器请求,

enter image description here

根据您使用的语言,您需要在URL中添加一些随机元素。
<img src="https://picsum.photos/200/300?nocache=<?php echo microtime(); ?>" >
<img src="https://picsum.photos/200/300?nocache=<?php echo microtime(); ?>">

我在PHP中添加了microtime(),使用microtime的意义在于,如果服务器和客户端快速响应,使用time()将不能总是提供不同的请求URL。
现在我得到了两个请求和两张图片, enter image description here

1
你需要在URL中随机生成数字; URL => https://picsum.photos/200/300?random=1
<img id = 'imgShow' />

document.getElementById('imgShow').src = 'https://picsum.photos/'+(200+rand())+'/' + (300 + rand()) +'?random=1';}

function rand(){ return Math.floor(Math.random() * 90)} ;

0
在 Laravel(PHP) 的 seeder/factory 中,你可以使用类似以下的代码:
'url' => 'https://picsum.photos/1024/1024?nocache='.microtime()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接