Используйте imagemagick через node.js на Lambda. Многие люди сделали это. Вот хороший пример: https://tech.mybuilder.com/memes-as-a-service-using-lambda-serverless-and-imagemagick/
Лямбда-функция выглядит как это:
'use strict';
const gm = require('gm').subClass({ imageMagick: true });
const fs = require('fs');
const { IMAGES_DIR, TEXT_SIZE, TEXT_PADDING } = process.env;
const parseText = text => (text || '').toUpperCase();
const getImages = () => fs.readdirSync(IMAGES_DIR);
const parseImage = image => getImages().find(file => file.indexOf(image) === 0);
const random = arr => arr[Math.floor(Math.random() * arr.length)];
const randomImage = () => random(getImages());
module.exports.meme = (event, context, callback) => {
const input = event.queryStringParameters || {};
const top = parseText(input.top);
const bottom = parseText(input.bottom);
const image = parseImage(input.image) || randomImage();
const meme = gm(`${IMAGES_DIR}${image}`);
meme.size(function (err, { height }) {
meme
.font('./impact.ttf', TEXT_SIZE)
.fill('white')
.stroke('black', 2)
.drawText(0, -(height / 2 - TEXT_PADDING), top, 'center')
.drawText(0, height / 2 - TEXT_PADDING, bottom, 'center')
.toBuffer(function (err, buffer) {
callback(null, {
statusCode: 200,
headers: { 'Content-Type': 'image/jpeg' },
body: buffer.toString('base64'),
isBase64Encoded: true,
});
});
});
};
Собственный внутренний компилятор Python может проанализировать это при использовании нотации Python.
, Если Ваше изменение нотация немного, Вы будете более счастливыми.
import compiler
eq= "sin(x)*x**2"
ast= compiler.parse( eq )
Вы получаете абстрактное синтаксическое дерево, с которым можно работать.
f = parser.parse('sin(x)*x^2').to_pyfunc()
, Где parser
мог быть определен с помощью СГИБА, pyparsing, встроенного токенизатора, синтаксического анализатора, ast.
не используют eval
на вводе данных пользователем.
Sage предназначается как matlab замена и в вводные видео , продемонстрировано, как подобный Вашему случаи обрабатываются. Они, кажется, поддерживают широкий спектр подходов. Так как код является открытым исходным кодом, который Вы могли просмотреть и видеть сами, как авторы обрабатывают такие случаи.
Подчеркнуть J.F. Совет Sebastian, 'оценка' и даже решения 'для компилятора' могут быть открыты для тонких дыр в системе безопасности. Насколько защищенный вход? С 'компилятором' можно, по крайней мере, отфильтровать вещи как getattr поиски от AST, но я нашел, что легче использовать СГИБ или pyparsing для этого вида вещи, чем он должен защитить результат освобождения справки Python.
кроме того, 'компилятор' неуклюж и тверд использовать. Это удержано от использования и удалено в 3,0. Необходимо использовать 'ast' модуль (добавленный в 2,6, доступный в 2,5 как '_ast').
По согласованию с вартеком. Я бы использовал SymPy - в частности, функция lambdify должна делать именно то, что вы хотите.
См.: http://showmedo.com/videotutorials/video?name=7200080&fromSeriesID=720
для очень хорошего объяснения этого.
С наилучшими пожеланиями,
pyparsing может делать то, что вы хотите ( http://pyparsing.wikispaces.com/ ), особенно если строки взяты из ненадежного источник.
См. Также http://pyparsing.wikispaces.com/file/view/fourFn.py , где есть довольно полнофункциональный калькулятор, построенный с его помощью.