最近应一个博友要求写了个随机图的api,可让php直接在浏览器中输出图片,支持本地文件也支持图片链接,主要功能就类似于那位博友说的网上的漫月api,下面言归正传直接贴上代码吧。

index.php(主体程序)<?php

error_reporting(E_ERROR);

require_once '../include/common.php';

require_once 'lib/imgdata.php';

require_once 'lib/functions.php';

$karnc = new imgdata;

if ($_GET['a'] == 'local') {

/* 列出指定目录下的图片 */

$CONFIG = array(

'imageManagerAllowFiles' => array(".png", ".jpg", ".jpeg", ".gif", ".bmp"),

'imageManagerListPath' => "/background/upload/",

);

$host = 'http://' . $_SERVER['HTTP_HOST'];

$allowFiles = $CONFIG['imageManagerAllowFiles'];

$path = $CONFIG['imageManagerListPath'];

$allowFiles = substr(str_replace(".", "|", join("", $allowFiles)), 1);

/* 获取文件列表 */

$path = $_SERVER['DOCUMENT_ROOT'] . (substr($path, 0, 1) == "/" ? "" : "/") . $path;

$files = getfiles($path, $allowFiles);

if (!count($path) || empty($files)) {

$imgFile = 'http://api.karnc.com/background/404.jpg';

$karnc->getdir($imgFile);

$karnc->img2data();

$karnc->data2img();

die;

}

/* 获取指定范围的列表 */

$len = count($files);

for ($i = 0, $list = array(); $i < $len; $i++) {

$list[] = $files[$i];

}

$rand = array_rand($list, 1);

$img = $list[$rand];

$imgUrl = $host . $img;

$imgFile = $_SERVER['DOCUMENT_ROOT'] . (substr($list[$rand], 0, 1) == "/" ? "" : "/") . $img;

} else {

//这里是从数据库中取相应图片(博主是使用树洞外链+又拍云做的)

$img = $db_pdo->getOne("select `ming` from sd_file where quality = 1 ORDER BY RAND() limit 1");

$host = 'https://static.karnc.com/';

$imgFile = $imgUrl = $host . $img['ming'];

}

$refer = $_SERVER['HTTP_REFERER']; //前一URL

$karnc->getdir($imgFile);

$karnc->img2data();

$karnc->data2img();

die;

?>

imgdata.php(浏览器输出图片类)<?php

class imgdata{

public $imgsrc;

public $imgdata;

public $imgform;

public function getdir($source){

$this->imgsrc = $source;

}

public function img2data(){

$this->_imgfrom($this->imgsrc);

return $this->imgdata=fopen($this->imgsrc,'rb');

}

public function data2img(){

header("content-type:$this->imgform");

return fpassthru($this->imgdata);

}

public function _imgfrom($imgsrc){

$info=getimagesize($imgsrc);

return $this->imgform = $info['mime'];

}

}

?>

function.php(公共函数)<?php

/**

* 遍历获取目录下的指定类型的文件

* @param $path

* @param array $files

* @return array

*/

function getfiles($path,$allowFiles,&$files = array())

{

if (!is_dir($path)) return null;

if(substr($path, strlen($path) - 1) != '/') $path .= '/';

$handle = opendir($path);

while (false !== ($file = readdir($handle))) {

if ($file != '.' && $file != '..') {

$path2 = $path . $file;

if (is_dir($path2)) {

getfiles($path2, $allowFiles, $files);

} else {

if (preg_match("/\.(".$allowFiles.")$/i", $file)) {

$files[] =substr($path2, strlen($_SERVER['DOCUMENT_ROOT']));

}

}

}

}

return $files;

}

/**

* 域名白名单校验

* @param $domain_list(白名单)

* @return true/false

*/

function checkReferer($domain_list=array('karnc.com','www.karnc.com')){

$status=false;

$refer= $_SERVER['HTTP_REFERER']; //前一URL

if($refer){

$referhost=parse_url($refer);

$host=strtolower($referhost['host']);//来源地址主域名

if($host==$_SERVER['HTTP_HOST'] || in_array($host,$domain_list)){

$status=true;

}

}

return $status;

}

?>

这个随机图api的主要代码都在上面,在使用php直接在浏览器输出图片与个人带宽有关,图片太大还是会影响页面的加载速度,所以还是尽可能的压缩下图片再上传。图片外链我使用的是树洞外链+又拍云做的,本来打算使用又拍云的图片缩略处理功能的,这样可以让接口响应速度快一点,这个功能等有时间再研究下吧。

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

php下载随机api图片_php中直接输出随机图片的API相关推荐

  1. php获取文章封面图片,Discuz!无图片文章中列表页自动提取图片随机选择一张作为封面 - 魔幻精灵の点滴记忆...

    在门户列表页中,默认为党文章中包含有图片是选择第一张作为列表页上的封面.如下图: 但是有时候为了美观与一致性需要在文章里面没有包含图片时,封面照样显示图片.那怎么办? 方法(Discuz!X3.2亲测 ...

  2. java ie下载文件名乱码问题_php中强制下载文件的代码(解决了IE下中文文件名乱码问题)...

    中间遇到一个问题是提交的中文文件名直接放到header里在IE下会变成乱码,解决方法是将文件名先urlencode一下再放入header,如下. $file_name = urlencode($_RE ...

  3. css 剪辑图片_CSS中的clip-path裁剪图片用法

    CSS中的clip-path能够让你指定一个网页元素的显示区域,而不是缺省的显示全部.在过去有个等效的属性, clip,但在新的CSS规范中,它已经被标志为deprecated,用新的clip-pat ...

  4. php mysql 随机排序函数_php+mysql实现数据库随机重排实例

    本文实例实现了php+mysql数据库随机重排的方法,可将表中的所有数据随机读出来一次之后再进行随机保存到另一个表,从而达到了记录随机的功能. 主要实现代码如下: //数据库连接就不写在这里面了 $s ...

  5. java 按钮设置图片_Java中如何设置带图片按钮的大小

    在java部分需要用到图形界面编程的项目中,经常会使用图片设置对按钮进行美化,但是使用时会出现一个很麻烦的问题, 按照方法:JButton jb1 = new JButton(); jb1.setBo ...

  6. html 如何设置选择图片,html中如何设置默认图片?

    前言 大家可能都知道img标签是怎么设置默认图片的,但是你知道background-img是如何设置默认图片的嘛? img 这里是应用了img标签的``事件,当加载失败就用默认图片地址.但是这里可能出 ...

  7. java jframe 图片_java中JFrame添加背景图片

    急!请帮忙修改这个Java程序,添加背景图片.源代码:importjava.awt.*;importjava.awt.event.*;importjava.net.URL;importjavax.sw ...

  8. android base64 转图片,Android 中 Base64 转换成 图片

    场景 项目中有个功能是显示微信付款码,为了节省服务器存储,将图片以Base64的形式存储,客户端接收到后将Base64转换成图片并加载,但是不要存放大图,在网上看到的大多都是使用了一个java库(im ...

  9. html 划到该区域有图片,html中如何在背景图片的某个区域加入连接

    导读: 如这段代码具体是怎么解释的!coords="11,488,218,552每个数字代表是什么! spooner童生 一级 最佳答案 你所举的例子是图像映射,下面这篇文章很清楚的说明了什 ...

最新文章

  1. vmware中的网络(bridge,nat)(转载)
  2. 字节跳动最新开源!java语言程序设计进阶篇
  3. Akka之在IoT系统中使用Actor(一)
  4. MybatisPlus代码生成器配置
  5. Mac OS X 中快速访问系统根目录的四种方法
  6. C#复习笔记(3)--C#2:解决C#1的问题(可空值类型)
  7. ProgressBar与Handler的整合应用
  8. string 与BigDecimal互转
  9. 【5分钟 Paper】Dueling Network Architectures for Deep Reinforcement Learning
  10. 08.存储Cinder→5.场景学习→01.LVM Volume
  11. java applet图形_java APPlet 绘制图像
  12. strlen源码分析
  13. 百度长期不收录网站怎么办?9个方法解决不收录
  14. linux超级服务器inetd详解
  15. 解决data too long for column 'name' at row2
  16. MySQL--局域网、外网访问MySQL
  17. 怎么才能画出漂亮的思维导图
  18. npm ERR! Could not install from “Files\nodejs\node_cache\_npx\10184“ as it does not contain a packag
  19. 使用Latex画三线表时出现线条宽度不一致的情况
  20. nodejs之setTimeout

热门文章

  1. 企业AAA信用等级办理好处,认证流程
  2. 数据结构:线性链表的c语言实现
  3. 信息流优化师以后的路在哪里?
  4. windows10风格 springboot vue.js html 跨域 前后分离 activiti 整合项目框架源码
  5. 线性表的链式存储结构以及单链表的插入和删除原理实现
  6. 文件的拓展名(后缀名)怎么快速修改
  7. 更灵敏、更精准、更智能,机器人避障也能“随心所欲”
  8. Excel 函数大全之 INTERCEPT function 获取线性回归线的截距
  9. 体育馆场地预约系统毕业设计,体育场地预约管理系统毕设,运动场地场地预约约定系统毕业设计论文需求分析
  10. 打造中国版ChatGPT,国内有哪些学术力量能抢滩?