Есть ли способ контролировать, как отображаются миниатюры?

Используя производный API, я обнаружил, что сгенерированные миниатюры очень темные, вот скриншот из вьювера:

Изображение для просмотра

А вот скриншот автоматически сгенерированного эскиза:

Эскиз создан

Загруженный файл представляет собой файл STL.

Как создать миниатюру, похожую на превью?

Спасибо!


person e-Jah    schedule 02.09.2016    source источник


Ответы (2)


К сожалению, на данный момент нет контроля над генерацией эскизов с помощью Derivatives API.

У нас есть API-интерфейс Render-as-a-service, который будет выпущен в какой-то момент, но пока недоступен.

Единственным обходным решением на данный момент будет загрузка модели в программу просмотра и ее скриншот. Существует API для создания снимков экрана, см. мою запись в блоге, поэтому процесс можно автоматизировать, но модель должна отображаться в браузере.

надеюсь, это поможет

person Philippe    schedule 02.09.2016

На сайте Instructables.com (одно из подразделений Autodesk) мы столкнулись с той же проблемой с API производных; нам также нужны были миниатюры размером больше 400x400 изображений, предоставляемых Forge API.

Если вы используете Nodejs, вы можете использовать наш инструмент для создания миниатюр с открытым исходным кодом, который очень быстро создает миниатюры STL на стороне сервера:

https://www.npmjs.com/package/node-stl-thumbnailer

Подход здесь создает сцену threejs на стороне сервера, а затем визуализирует ее с помощью CanvasRenderer и node-canvas. Таким образом, он не зависит от веб-браузера, графического процессора или других интерфейсных технологий. Поскольку это не трассировщик лучей, он не требует дополнительных вычислений, как полная служба рендеринга, но также имеет ограничения. Помимо прочего, нет поддержки теней, освещения или материалов.

В демонстрационном проекте показано быстрое приложение ExpressJS, которое будет принимать URL-адрес для STL и синхронно возвращать миниатюру запрошенного размера.

Код выглядит следующим образом:

// index.js 
var StlThumbnailer = require('node-stl-thumbnailer');
var app = require("express")();

app.get('/thumbnailer', function(req, res, next) {
    var thumbnailer = new StlThumbnailer({
        url: req.query.url,
        requestThumbnails: [
            {
                width: 500,
                height: 500,
            }
        ]   
    })
    .then(function(thumbnails){
          // thumbnails is an array (in matching order to your requests) of Canvas objects 
          // you can write them to disk, return them to web users, etc 
          thumbnails[0].toBuffer(function(err, buf){      
          res.contentType('image/png');
          res.send(buf)
        })
    })
    .catch(function(err){
        res.status(500);
        res.send("Error thumbnailing: "+err);
    });
});

app.listen(3000, function () {
  console.log('Listening on port 3000\n')
});

А вот пример "рендеринга":

Образец вывода миниатюр

person strandedcity    schedule 23.01.2017