Easyimage图床搭建

图床功能:

  • 支持任意图片格式转换
  • 支持仅登录后上传
  • 支持设置图片质量
  • 支持文字/图片水印
  • 支持设置图片指定宽/高
  • 支持上传图片转换为指定格式
  • 支持限制最低宽度/高度上传
  • 支持API
  • 在线管理图片
  • 支持网站统计
  • 支持设置广告
  • 支持自定义代码
  • 支持图片鉴黄
  • 支持上传IP黑白名单
  • 支持创建仅上传用户

 开源地址:https://github.com/icret/EasyImages2.0

我的Demo:https://tc.sunzishaokao.com/

搭建环境:

1. PHP5.6以上

2.已备案域名

3.服务器1h1g即可

搭建教程:

如果你是宝塔面板用户,则直接在插件商店搜索“简单图床”部署即可!

如果你是非宝塔用户,请继续往下看:

Linux:

#centos yum install git#ubuntu/debian apt install gitgit clone https://github.com/icret/EasyImages2.0.git #将源码下载到你的网站根目录里

Windows:

点击链接下载:https://github.com/icret/EasyImages2.0/archive/refs/heads/master.zip

安装时需要注意:

  • i目录需要可读可写
  • 关闭防跨站攻击
本文转载于网络 如有侵权请联系删除

相关文章

  • HashMap底层结构

    HashMap原理HashMap的底层数据结构原理HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干Put方法的原理调用hashMap.put("apple",0),插入一个Key为“apple"的元素。这时候我们需要利用一个哈希函数来确定Entry的插入位置(index):index=Hash(“apple”)假定最后计算出的index是2,那么结果如下但是,因为HashMap的长度是有限的,当插入的Entry越来越多时,再完美的Hash函数也难免会出现index冲突的情况。比如下面这样这种情况,可以通过使用链表来解决HashMap数组的每一个元素不止是一个Entry对象,也是一个链表的头节点。每一个Entry对象通过Next指针指向它的下一个Entry节点。当新来的Entry映射到冲突的数组位置时,只需要插入到对应的链表即可:需要注意的是,新来的Entry节点插入链表时,使用的是“头插法”Get方法的原理使用Get方法根据Key来查

  • 如何给条码设置静区标记

    有不少小伙伴在制作EAN13条码时,遇到一个小问题,那就是条形码可读字符后面的“>”符号要怎么打出来?其实这个“>”符号就是静区标志。静区也叫空白区,分为左空白区和右空白区,左空白区是让扫描设备做好扫描准备,右空白区是保证扫描设备正确识别条码的结束标记。为了防止左右空白区(静区)在印刷排版时被无意中占用,可在空白区加印一个静区标记(左侧没有数字时印<号,右侧没有数字时加印>号)。主要作用就是防止静区宽度不足。只要静区宽度能保证,有没有这个符号都不影响条码的识别。那么这种静区标志在哪里,又是如何显示的?小编下面详细介绍。在条码标签软件中,创建一个EAN13条码,在右侧的条码属性里可以看到“显示静区符号”勾选框,勾选就可以了。条码底色一般是白的静区符号就是控制周围的颜色不能侵入的范围,不过这个符号本身是可有可无的生成条码的时候不选静区标记就不会显示。除了EAN13条码可以显示“>”符号,EAN8、ISBN和GTIN-12等也是可以添加静区标记的。想要了解更多关于条码打印软件的详细信息,可持续关注我们。

  • 用交互式代理促进搜索引擎的发展

    机器能学会使用搜索引擎作为寻找信息的互动工具吗?这将对使世界上的知识更容易获得产生深远的影响。本文介绍了在设计学习元策略的代理方面的第一步,这些元策略用于上下文查询的细化。我们的方法使用机器阅读来指导从聚合的搜索结果中选择精炼术语。然后,代理被赋予简单而有效的搜索操作符,以对查询和搜索结果进行细粒度和透明的控制。我们开发了一种生成合成搜索会话的新方法,它通过(自我)监督学习,利用了基于转化器的生成性语言模型的力量。我们还提出了一个具有动态约束行动的强化学习代理,可以完全从头开始学习交互式搜索策略。在这两种情况下,我们都获得了比具有强大信息检索基线的一次性搜索更明显的改进。最后,我们对所学的搜索策略进行了深入分析。原文题目:BoostingSearchEngineswithInteractiveAgents原文:Canmachineslearntouseasearchengineasaninteractivetoolforfindinginformation?Thatwouldhavefarreachingconsequencesformakingtheworld'sknowl

  • 001-STM32+BC26基本控制篇-整体运行测试(Android)

    说明这节测试一下APP扫码绑定BC26模组然后实现APP和开发板之间通过MQTT进行远程通信控制.这一节作为板子的整体功能测试,用户下载这一节的程序用来测试基本控制篇实现的基本功能还有就是测试一下板子是否工作正常.先睹为快测试准备工作1.请根据硬件使用说明下载这节程序到单片机2.单片机工程目录3.Hex文件位置4.别忘了安装好手机卡和天线5.安装手机APP6.手机APP安装包位置7.点击APP右上方的菜单栏,选择扫一扫8.扫描模组上面的二维码9.扫描成功以后将会在主页面添加一个设备注:显示的内容为模组的IMEI号主页面没做美化哈.10.点击显示的设备,进入设备控制页面提示:左上角返回键旁边显示的是设备的状态,正常情况下应该显示"在线"如果显示"离线",说明硬件没有正常工作.下载完程序建议复位下;活动一下手机卡和天线,可能接触不良;如果还不可以,可以把串口1打印的日志发到售后支持群.测试继电器控制1.点击右上角的开关控制继电器2.动作一下开发板上面的PB5按键,继电器会翻转测试温湿度传感器1.正常情况下OLED会显示当前的温湿度数据(也可以验证OL

  • 什么是哈希表?

    我们在这篇文章将要学习最有用的数据结构之一—哈希表,哈希表的英文叫HashTable,也可以称为散列表或者Hash表。哈希表用的是数组支持按照下标随机访问数据的特性,所以哈希表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。哈希表存储的是由键(key)和值(value)组成的数据。例如,我们将每个人的性别作为数据进行存储,键为人名,值为对应的性别,其中M表示性别为男,F表示性别为女。为什么需要哈希表?为了和哈希表进行对比,我们先将这些数据存储在数组中。此处准备了6个箱子(即长度为6的数组)来存储数据,假设我们需要查询Ally的性别,由于不知道Ally的数据存储在哪个箱子里,所以只能从头开始查询,这个操作便叫作线性查找。一般来说,我们可以把键当成数据的标识符,把值当成数据的内容。从0号箱子开始查找,发现0号箱子中存储的键是Joe而不是Ally,因此接着查找1号箱子。哦豁,1号箱子中的也不是Ally,没办法,只能接着往下找。有点小糟糕,2号、3号箱子中的也都不是Ally。功夫不负有心人,当我们查找到4号箱子的时候,发现其中数据的键为Ally,把键对应的值取出,我

  • redis探秘:选择合适的数据结构,减少80%的内存占用,这些点你get到了吗?

    本文首发于京东零售平台公众号,https://mp.weixin.qq.com/s/uzuz7rqctQ-bjdRcf1tO9gredis作为目前最流行的nosql缓存数据库,凭借其优异的性能、丰富的数据结构已成为大部分场景下首选的缓存工具。由于redis是一个纯内存的数据库,在存放大量数据时,内存的占用将会非常可观。那么在一些场景下,通过选用合适的数据结构来存储,可以大幅减少内存的占用,甚至于可以减少80%-99%的内存占用。利用zipList来替代大量的Key-Value先来看一下场景,在Dsp广告系统、海量用户系统经常会碰到这样的需求,要求根据用户的某个唯一标识迅速查到该用户的id。譬如根据mac地址或uuid或手机号的md5,去查询到该用户的id。特点是数据量很大、千万或亿级别,key是比较长的字符串,如32位的md5或者uuid这种。如果不加以处理,直接以key-value形式进行存储,我们可以简单测试一下,往redis里插入1千万条数据,1550000000-1559999999,形式就是key(md5(1550000000))→value(1550000000)这种。然后

  • 人工智能学习 - 正则化和特征选择

    前言课程源于英特尔提供的学习资料。 人工智能学习目录正则化和特征选择正则化和特征选择.png相关代码Ridge回归:语法 //导入包含回归方法的类 fromsklearn.linear_modelimportRidge //创建类的实例 RR=Ridge(alpha=1.0) //在数据上拟合实例,然后预测期望 RR=RR.fit(X_train,y_train) y_predict=RR.predict(X_test)复制弹性网络(ElasticNet)回归:语法 //导入包含回归方法的类 fromsklearn.linear_modelimportElasticNet //创建类的实例 EN=ElasticNet(alpha=1.0,l1_ratio=0.5) //在数据上拟合实例,然后预测期望 EN=EN.fit(X_train,y_train) y_predict=EN.predict(X_test)复制递归特征消除:语法 //导入包含特征选择方法的类 fromsklearn.feature_selectionimportRFE //创建类的实例 rfeMod=RFE(est,

  • 游戏文本关键词提取工作的尝试和探索

    一、文本关键词提取的前世今生 文章的表示具有不同的层次,由粗到细可分为类型(分类)、事件(主题)、代表词(关键词)等,关键词是文章表示的重要环节。文本的关键词可以被认为“浓缩”了整篇文章的主旨和要义,是一篇文章高度概括的自然语言表示形式。更加精准的文本关键词,可以为后续推荐系统带来更精准的文本内容特征、召回更高质量的同类型文章;同时,高质量的关键词也可以作为分类标签直接用于内容运营和用户推荐,提升编辑和运营同事的工作效率。文本关键词提取问题吸引了大量研究者的关注。从最简单的TF-IDF计算词语权重,到TextRank和LDA等无监督的方法,再到目前广泛使用的Seq2Seq等神经网络模型,无一不在关键词提取领域有着众多实践和探索。二、游戏文本关键词提取的概况在公司内部的电竞和游戏中心等综合类游戏产品中都沉淀了大量的游戏攻略、新手指引、晋级指南等多种不同类型的游戏文本,如何将合适的游戏文本打上正确的关键词标签,并将内容推送给恰当的用户成为一个重要的课题。我们在游戏文本关键词提取工作的探索中,尝试了基于图的无监督方法TextRank和基于有监督的Seq2Seq神经网络方法,并针对两种方法的表

  • 有奖竞猜 | RSAC2022创新沙盒解读,一网打尽

    解读创新沙盒RSAC2022创新沙盒决赛将于旧金山时间6月6日举行,作为“安全圈的奥斯卡”,大赛每年都备受瞩目。绿盟君通过对本次十强初创公司进行整合分析,提前剧透当下最火热的网络安全新热点,让我们一起去看一下。图1RSAC2022创新沙盒十强公司[1]InnovationSandboxContest根据主要产品类别,创新沙盒十强公司可以被分为以下几类:图2RSAC2022创新沙盒十强产品领域本次创新沙盒十强中共有4家云安全公司,通过与RSAC2021十强初创公司的产品类型对比,可以看出RSAC2021创新沙盒的产品种类分布相对平均,且云安全似乎也不是绝对的重头。那为什么今年RSAC的云安全公司数量如此之多呢?绿盟君通过对今年的云安全产品进行分析,发现这些产品的功能已很难用单一的传统云安全产品概念去覆盖。图3RSAC2021与RSAC2022创新沙盒产品领域对比1云安全产品的创新图4[2]为AraaliNetworks弹性补丁的执行流程。AraaliNetworks基于eBPF对云上应用行为进行检测,并在应用行为与预定义行为出现偏移时,自动化纠正应用行为偏差。这种方案有别于传统的威胁检测

  • Mac下ssh root@localhost多次输入密码 提示:permission denied解决方案

    一、问题描述   在做渗透测试时,需要测试自己写的脚本是否可以正常运行,所以使用本机ip地址来做验证,但是发现sshroot@localhost,会提示没权限。 二、终极解决方案   在网上看到很多解决方案,试了好多也没啥用,最终还是通过下面的方法解决的。 1、在命令行输入如下命令: sudovim/etc/ssh/sshd_config 复制   2、修改PermiRootLogin为yes,如下图    

  • 《InsideUE4》UObject(一)开篇

    >UE生UObject,UObject生万物 ##引言 在上个GamePlay专题,谈到UE创建游戏世界的时候([GamePlay架构(一)Actor和Component](https://zhuanlan.zhihu.com/p/22833151)),简单的介绍了一下UObject的功能: ![UObjectAndActor.jpg-21.2kB][1] >藉着UObject提供的元数据、反射生成、GC垃圾回收、序列化、编辑器可见、ClassDefaultObject等,UE可以构建一个Object运行的世界。(后续会有一个大长篇深挖UObject) 那么从本专题开始,我们将开始慢慢的填这个大坑。正所谓,千里之堤溃于蚁穴,万丈高塔始于垒土。在阅读分析游戏引擎源码的时候,又或者是想要扩展引擎功能,如果对于引擎底层对象创建的机制不太清楚,则常常会有点力不从心,因为功能模块的运行机制、数据流程、资源的加载释放时机,往往也都是依赖于对象的生命周期。而如果想要实现一个自己的游戏引擎,从一开始,也都得设计一个完善的对象管理机制,然后慢慢的在其上叠加功能,这个对象模型设计实现的如何

  • appserv升级php

    安装thinkphp的时候提示必须要php5.3及以上 本地测试服务器使用的是appserv集成环境 所以要单独升级php 首先到官网下载http://php.net/downloads.phpwindows版本的php高于5.3的 然后将C:\AppServ\php5\文件夹以及C:\windows\php.ini备份好之后将下载的文件覆盖至C:\AppServ\php5 然后将其中的php.ini-production更名为php.ini然后覆盖C:\windows\php.ini 打开并编辑 去掉以下几种注释   extension=php_curl.dllextension=php_gd2.dllextension=php_gmp.dllextension=php_imap.dllextension=php_mbstring.dllextension=php_exif.dllextension=php_mcrypt.dll extension=php_mysql.dll extension=php_pdo.dll extension=php_pdo_mssql.dll

  • PowerDesigner 15的Table表视图的列显示Code

    PowerDesigner15的图表的Table表视图一般显示成这样: 现在,我要将Code显示到Table表视图上,该怎么做?选择菜单:Tools→DisplayPreferences,弹出对话框选择Table,点击Advanced按钮,弹出对话框选择Columns,点击Select按钮,弹出对话框后选中Code并将其移动到最上面。 现在看看Table表视图的效果:  

  • protobuf--repeated get set

    普通字段复制 packagetest_namespace; messageFatherMsg{ repeatedstringfather=1; }复制 #include<stdio.h> #include<iostream> #include<string> #include"test.pb.h" usingnamespacestd; intmain() { //方式1 /* test_namespace::FatherMsgfather_msg; string*str1=father_msg.add_father(); *str1=string("hello"); string*str2=father_msg.add_father(); *str2=string("world"); for(inti=0;i<father_msg.father_size();i++) { cout<<father_msg.father(i)<<endl; } */ //方式2(建议) test_namespace::F

  • 一个艰难的决定

      种种迹象表明,从2014开始,计算机正在从大型机进化成PC以后,迎来下一巨大的进化,就是从PC进化成手机或大手机(平板),相信以后的平板也是一样有3G4G模块,其实就是一样的东西。   主要的大数据有:   1.2014,Android设备出货量达11亿部,IOS也有3,4亿部,而PC还是3亿多。2014年,移动设备总量将大大超过PC设备。   2.2014,4G开始普及,尤其是中国,移动设备网络的接入量将超过PC。   3.移动设备的CPU大大加强,2014,64位的ARM先进入服务器,4核8核,以及高性能GPU的产品成为主流,这在性能上基本接近现有的PC设备。   4.移动设备的1080P,6寸以上大屏成为常态,移动设备显示方面不再存在障碍。   5.手机支付这一关键问题被打通,手机商务不再有问题。     从上面的数据可以看出,手机拥有了超过PC的数量,比PC更方便的上网能力,和PC接近的计算能力,和PC一样

  • 在ArangoDB中实现connectedcomponents算法

    操作环境: tool:ArangoDB3.3.13 操作系统:Debian7.2.0-20 概念: ConnectedComponents即连通体算法。用id标注图中每个连通体,将连通体中序号最小的顶点的id作为连通体的id。 如果在图G中,任意2个顶点之间都存在路径,那么称G为连通图,否则称该图为非连通图,则其中的极大连通子图称为连通体,如下图所示,该图中有两个连通体: 实例: 创建集合 //testv LETdata=[{"_key":"6014c5cac3424d8386dac12c46017c03","host_name":"SalihTektase"}, {"_key":"6014c5ccca5b4cae893257bf86f0ead0","host_name":"AdityaBramhan"}, {"_key":"6014c5c80177417fbfd0faf9d5fb31a4","host_name":"Icapalya"}, {"_key":"6014c5c891e54e4a8903cd306d55eb26","host_name":"null"}, {"_key"

  • QMainWindow

    QMainWindow继承自QWidget,是一个顶层窗口,它可以包含其他的界面元素:菜单栏、工具栏、状态栏、子窗口等。 QMainWindow不能设置布局(setLayout()方法),因为它有自己的布局:   1#!/usr/bin/python3 2#-*-coding:utf-8-*- 3 4importsys 5fromPyQt5.QtWidgetsimportQMainWindow,QApplication 6 7if__name__=='__main__': 8app=QApplication(sys.argv) 9 10mainWindow=QMainWindow() 11mainWindow.resize(400,200) 12mainWindow.setWindowTitle("MainWindowexample"); 13mainWindow.show() 14 15sys.exit(app.exec_())复制       Reference: https://doc.qt.io/qt-5/qmainwindow.h

  • 尾曲

    我像一只抓钩 在世界的地板上拖曳而过 我无需抓住一切东西 疲倦的愤怒,闪亮的屈从 执行者收集石头,上帝在沙滩上写字 静悄悄的房间 家具在月光中看起来准备好猝然爆发 我穿过一片空铠甲的森林 慢慢走进自己

  • openssl 签署SAN证书

    1、Prepareopensslconfigfile. cat>my-openssl.cnf<<EOF [ca] default_ca=CA_default [CA_default] x509_extensions=usr_cert [req] default_bits=2048 default_md=sha256 default_keyfile=privkey.pem distinguished_name=req_distinguished_name attributes=req_attributes x509_extensions=v3_ca string_mask=utf8only [req_distinguished_name] [req_attributes] [usr_cert] basicConstraints=CA:FALSE nsComment="OpenSSLGeneratedCertificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer [v3_ca] sub

  • 一脚踩进java之基础篇38——File

    一、File类 1.1IO 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。 因此我们把这种输入和输出动作称为IO操作。 1.2File类的出现 Java中把文件或者目录(文件夹)都封装成File对象 也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。 1.3File类的构造函数 1)通过构造方法创建File对象,我们进行演示: publicclassFileDemo{ publicstaticvoidmain(String[]args){ //File构造函数演示 StringpathName="e:\\java_code\\day22e\\hello.java"; Filef1=newFile(pathName);//将Test22文件封装成File对象。注意;有可以封装不存在文件或者文件夹,变成对象。 System.out.println(f1); Filef2=newFile("e:\\java_code\\day22e","hello.jav

  • 剑指offer6-面试中的各项能力

    题目-数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数。如Input:  array=1,2,3,3,3,3,4,6  k=3Output:  4复制 思路 1.由于输入的数组是排序的,那么二分查找算法很适用这个场景。二分查找很容易找到一个3,由于3可能出现很多次,因此我们可以在3的左右两边按顺序扫描,分别找到第一个3和最后一个3. 因为要查找的数字在长度为n的数组中有可能出现O(n)次,所以顺序扫描的时间复杂度为O(n) 2.优化的解法是:用二分查找算法直接找到第一个k和最后一个k 思路就是:(以找到第一个k为例)二分查找总是拿数组中间的数字和k作比较,如果中间的数字比k大,那么k只有可能出现在数组的前半段,下一轮只要在数组的前半段查找就好了。反之。 如果中间数字==k,那么先判断这个数字是不是第一个k。如果位于中间数字的前一个数不是k,那么说明中间数就是第一个k;如果前一个数也是k,说明第一个k肯定在数组的前半段,下一轮依然需要在数组的前半段查找。 这样查找第一个k和最后一个k都是,使用二分查找法在数组中查找一个合乎要求的数字,时间复杂度都是O(logn)。 解法

相关推荐

推荐阅读