| FROM node:18-alpine | |
| WORKDIR /app | |
| RUN cat <<EOF > package.json | |
| { | |
| "name": "image-border-api-hf", | |
| "version": "1.0.0", | |
| "description": "API to add white borders to an image.", | |
| "main": "server.js", | |
| "scripts": { | |
| "start": "node server.js" | |
| }, | |
| "dependencies": { | |
| "axios": "^1.6.8", | |
| "express": "^4.19.2", | |
| "sharp": "^0.33.3" | |
| } | |
| } | |
| EOF | |
| RUN cat <<EOF > server.js | |
| const express = require('express'); | |
| const sharp = require('sharp'); | |
| const axios = require('axios'); | |
| const app = express(); | |
| const PORT = process.env.PORT || 7860; | |
| app.get('/add-border', async (req, res) => { | |
| const { url } = req.query; | |
| if (!url) { | |
| return res.status(400).json({ error: 'Параметр "url" обязателен.' }); | |
| } | |
| const top = parseInt(req.query.top, 10) || 0; | |
| const bottom = parseInt(req.query.bottom, 10) || 0; | |
| const left = parseInt(req.query.left, 10) || 0; | |
| const right = parseInt(req.query.right, 10) || 0; | |
| try { | |
| const imageResponse = await axios({ | |
| url, | |
| responseType: 'arraybuffer' | |
| }); | |
| const imageBuffer = imageResponse.data; | |
| const processedImage = await sharp(imageBuffer) | |
| .extend({ | |
| top: top, | |
| bottom: bottom, | |
| left: left, | |
| right: right, | |
| background: { r: 255, g: 255, b: 255, alpha: 1 } | |
| }) | |
| .png() | |
| .toBuffer(); | |
| res.set('Content-Type', 'image/png'); | |
| res.send(processedImage); | |
| } catch (error) { | |
| console.error('Ошибка обработки изображения:', error); | |
| res.status(500).json({ error: 'Не удалось обработать изображение.' }); | |
| } | |
| }); | |
| app.listen(PORT, () => { | |
| console.log(`Сервер запущен на порту ${PORT}`); | |
| }); | |
| EOF | |
| RUN npm install | |
| EXPOSE 7860 | |
| CMD [ "npm", "start" ] |