首页 > 系统相关 >docker环境利用centos7镜像 + miniconda + python3.9 + wkhtmltopdf 构建html转图片服务

docker环境利用centos7镜像 + miniconda + python3.9 + wkhtmltopdf 构建html转图片服务

时间:2024-12-23 11:53:34浏览次数:3  
标签:https url text image wkhtmltopdf centos7 html conda &&

1、目录结构

html2image
——Dockerfile
——main.py
——requirements.txt

2、Dockerfile

FROM centos:7

WORKDIR /app
COPY . /app/

RUN curl -O https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12.6-1.centos7.x86_64.rpm \
    && curl -O https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    && curl -o /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo \
    && yum install -y fontconfig freetype libX11 libXext libXrender libjpeg libpng openssl xorg-x11-fonts-75dpi xorg-x11-fonts-Type1 \
    && rpm -ivh wkhtmltox-0.12.6-1.centos7.x86_64.rpm\
    && rm -rf /usr/share/fonts/* && cp simsun.ttc /usr/share/fonts/ \
    && fc-cache -fv \
    && bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda \
    && rm -f Miniconda3-latest-Linux-x86_64.sh \
    && ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh \
    && echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc \
    && source /root/.bashrc \
    && conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ \
    && conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/ \
    && conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 \
    && conda config --set custom_channels.auto https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/ \
    && conda config --set show_channel_urls yes \
    && conda create -n py39 python=3.9 -y \
    && conda activate py39 \
    && pip install -r requirements.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 

EXPOSE 54248
CMD ["bash", "-c", "source /opt/conda/etc/profile.d/conda.sh && conda activate py39 && uvicorn main:app --host 0.0.0.0 --port 54248"]

  • 由于我用的是centos7镜像,所以最好提前下载好wkhtmltox的安装包
  • Miniconda3的安装脚本Miniconda3-latest-Linux-x86_64.sh
  • 华为镜像源(用来替换掉centos7里面的镜像源,原来的太慢了,我是centos7所以下载的Centos-7-reg.repo)
  • 字体文件(进入c:/windows/fonts/,里面的字体随便复制一个支持中文的到当前目录下就行)我这里是使用的宋体字simsun.ttc

3、main.py

  • 我这里是用的fastapi搭建的web服务,主要避免多客户端访问时候造成服务器卡顿
import imgkit
from fastapi import FastAPI, HTTPException, BackgroundTasks
from pydantic import BaseModel
from io import BytesIO
from fastapi.responses import StreamingResponse

app = FastAPI()
cfg = imgkit.config(wkhtmltoimage="/usr/local/bin/wkhtmltoimage")

class ImageRequest(BaseModel):
    url: str = None
    text: str = None

async def generate_image(url: str = None, text: str = None) -> BytesIO:
    """生成图像并返回二进制数据"""
    if url:
        img = imgkit.from_url(url, False, config=cfg)
    elif text:
        img = imgkit.from_string(text, False, config=cfg)
    else:
        raise ValueError("Either 'url' or 'text' must be provided")
    
    image_bytes = BytesIO(img)
    image_bytes.seek(0)
    return image_bytes

@app.post("/convert/")
async def convert(request: ImageRequest, background_tasks: BackgroundTasks):
    """处理图像生成请求"""
    if not request.url and not request.text:
        raise HTTPException(status_code=400, detail="Must provide either 'url' or 'text'.")

    # 这里不再使用后台任务,而是直接返回图像
    image_bytes = await generate_image(request.url, request.text)
    
    # 返回图像内容
    return StreamingResponse(image_bytes, media_type="image/png")

@app.get("/status/")
async def status():
    """返回服务器的状态"""
    return {"status": "Server is running"}

制作镜像

  • 进入html2image目录
 docker build -t html2image .
  • 运行镜像
docker run -d -p:54248:54248 html2image

使用postman校验接口,发现可以实现根据url生成图片,或者根据文本生成图片,效果如下图所示

标签:https,url,text,image,wkhtmltopdf,centos7,html,conda,&&
From: https://www.cnblogs.com/ziyueshiyun/p/18623657

相关文章

  • 大学生HTML期末大作业——HTML+CSS+JavaScript购物商城
    HTML+CSS+JS【购物商城】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript购物商城(草莓)
    HTML+CSS+JS【购物商城】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • CentOS7下的vsftpd服务器和客户端
    目录1、安装vsftpd服务器和ftp客户端;2、配置vsftpd服务器,允许普通用户登录、下载、上传文件;3、配置vsftpd服务器,允许anonymous用户登录、下载、上传文件;4、配置vsftpd服务器,允许root用户登录、下载、上传文件;5、只允许IP地址为192.168.98.1(Windows主机)和192.168.98.33(Linu......
  • 使用HTML5绘制一个Android的Logo
    要使用HTML5绘制一个Android的Logo,你可以使用<canvas>元素与JavaScript来手动绘制,或者使用SVG(可缩放矢量图形)来定义。由于AndroidLogo的复杂性,使用SVG可能更容易得到精确的结果。以下是一个简化的AndroidLogo的SVG示例,你可以将其嵌入到HTML中:<!DOCTYPEhtml><htmllang="en">......
  • 使用HTML5自定义一个复选框
    在HTML5中,虽然我们不能直接自定义原生的复选框样式,但我们可以使用一些技巧来模拟自定义复选框。以下是一个简单的示例,说明如何使用HTML、CSS和JavaScript来创建一个自定义复选框。HTML:<labelclass="custom-checkbox"><inputtype="checkbox"hidden><spanclass="ch......
  • 使用HTML5自定义一个下拉框
    在HTML5中,你可以使用原生的<select>和<option>元素来创建下拉框,但如果你想自定义其样式和行为,你可能需要使用一些额外的HTML、CSS和JavaScript。以下是一个简单的示例,展示如何使用HTML、CSS和JavaScript创建一个自定义的下拉框:HTML<divclass="custom-dropdown"><inputtype......
  • 使用HTML5绘制一个灯塔
    要在前端开发中使用HTML5绘制一个灯塔,我们可以利用HTML5的<canvas>元素和JavaScript来进行。以下是一个简单的示例,展示了如何绘制一个基本的灯塔形状:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content=&quo......
  • 使用HTML5绘制一只甲壳虫
    使用HTML5绘制甲壳虫主要依赖于<canvas>元素和JavaScript的CanvasAPI。下面是一个简单的示例,展示了如何绘制一个基本的甲壳虫形状:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width......
  • 使用HTML5绘制一只卡通版米老鼠
    在HTML5中,您可以使用<canvas>元素和JavaScript来绘制复杂的图形,如卡通版米老鼠。下面是一个简化的示例,说明如何开始绘制一个基本的米老鼠头部轮廓。请注意,这只是一个非常基础的示例,真正的米老鼠图形会更复杂,并需要更多的细节和颜色。HTML结构:<!DOCTYPEhtml><htmllang="en"......
  • 使用HTML5绘制一个汉堡
    要使用HTML5绘制一个汉堡,我们可以使用<canvas>元素和JavaScript。以下是一个简单的示例,展示了如何绘制一个基本的汉堡图形:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-......