|
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" ] |