imgedit / Dockerfile
opex792's picture
Create Dockerfile
5fbccc3 verified
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" ]