Best free online liquify tool to liquify photo online
Communication
When the liquify component is created it creates a webworker with the given arguments using the offscreen-canvas library, while also sending the buildChart message, so that the worker builds the chart on the provided canvas. When the input arguments change the component sends a message to the worker containing the updated arguments. When the component is destroyed, it sends a close message to the worker.
The chart-worker part connects to the given websocket addresses, processes the received data, draws and updates the chart, handles the messages of the liquify component, and regularly sends back the latency to the liquify component.
The typical messages among a container component, the Liquify component and the worker
-
buildChart: The worker stores the received input arguments, imports the overridden functions. Thereafter it connects to the given addresses using the connectToAddresses method, and builds the chart with the buildChart method. Finally it sets a repeating timer to render the chart every 30 millisecond using renderChart method.
-
setSize: calls the setSize method to set the chart size to the given width and height.
-
updateDate: updates the actDate attribute with the given value.
-
updateDataSetIDs: updates the dataSetIDs attribute with the given value, and calls updateDataSetIDs method to create new datasets on the chart to the new datasets.
-
updateColors: calls the updateColors function, which updates the colors on the chart.
-
updateDuration: stores the new duration value.
-
updateAddresses: invokes the updateAddresses function to update connections.
-
updateChartType: stores the new chartType value, and changes the chartType of the chart.
-
updateXAxisType: stores the new xAxisType value, and changes the xAxisType of the chart.
-
updateYAxisType: stores the new yAxisType value, and changes the yAxisType of the chart.
-
updateFunctionSource: imports the new overridden functions.
-
renderChart: renders the chart, if it is not suspended.
-
sendSpecialMessages: calls the sendSpecialMessages function, which sends the new messages to the given addresses.
-
timeBackward: stores the new timeBackward value.
-
suspended: stores the new suspended value.
-
close: The worker clears the rendering interval, closes the connections using the closeConnections method, destroys the chart and stops the worker.
The worker uses the functions of the FunctionOverrideInterface, which can be overridden.
The FunctionOverrideInterface contains the following functions:
-
checkData(latestStatus): If a message is received from a connection, the checkData function is called to check whether the received data is valid. It must return a boolean value.
-
findDataSetID(latestStatus, address): If the message is valid, the findDataSetID method is invoked. It uses the received message and the address, where the message came from, to determine the dataSetID, which the message belongs to.
-
convertMessageToData(data): Before the received data can be drawn on the chart, the message is converted to the proper format using the convertMessageToData function. The function returns an object with the following attributes:
- measured: the measurement time of the data
- x: the x-axis value of the data
- y: the y-axis value of the data
- r: radius of the value — if the chart is a bubble chart
Used for
Crafting
-
4x Protocite Bar
-
12x Liquified Crystal
-
2x Neptunium Rod
|
|
-
7x Trianglium Pyramid
-
12x Liquified Crystal
-
2x Neptunium Rod
|
|
Crystal Fusion Station
-
10x Ammonium Sulfate
-
10x Magnesium Powder
-
5x Liquified Crystal
-
2x Carbon
|
|
-
25x Oceanite Crystal
-
25x Sahkite Crystal
-
15x Liquified Crystal
|
|
-
25x Oceanite Crystal
-
2x Oceanite Crystal Seed
-
25x Feya Crystal
-
2x Feya Crystal Seed
-
10x Kespar Crystal
-
15x Liquified Crystal
|
|
-
25x Tokanite Crystal
-
25x Thanatite Crystal
-
15x Liquified Crystal
|
|
-
50x Emera Crystal
-
5x Emera Crystal Seed
-
10x Nhydri Crystal
-
15x Liquified Crystal
|
|
-
50x Emera Crystal
-
5x Emera Crystal Seed
-
10x Opul Crystal
-
15x Liquified Crystal
|
|
-
50x Feya Crystal
-
5x Feya Crystal Seed
-
10x Nhydri Crystal
-
15x Liquified Crystal
|
|
-
50x Oceanite Crystal
-
5x Oceanite Crystal Seed
-
10x Kespar Crystal
-
15x Liquified Crystal
|
|
-
50x Thanatite Crystal
-
5x Thanatite Crystal Seed
-
10x Rekite Crystal
-
10x Opul Crystal
-
15x Liquified Crystal
|
|
-
50x Thanatite Crystal
-
5x Thanatite Crystal Seed
-
10x Rekite Crystal
-
15x Liquified Crystal
|
|
Fermenter
-
25x Essentia Obscura
-
7x Liquid Metallic Hydrogen
-
2x Liquified Crystal
-
2x Rectified Spirits
|
|
-
3x Carbon Dioxide
-
2x Liquified Crystal
-
2x Blood
-
1x Empty Bottle
|
|
-
1x Falcon II Legs
-
25x Liquified Crystal
-
20x Durasteel Bar
|
|
-
20x Durasteel Bar
-
10x Graphene
-
25x Liquified Crystal
|
|
-
5x Beeswax
-
10x Liquified Crystal
-
1x Copper Wire
-
5x Glass
|
|
Liquid Mixer
-
1x Dirt
-
1x Liquified Crystal
|
|
-
1x Liquified Crystal
-
1x Bio-Ooze
|
|
-
1x Liquified Crystal
-
1x Black Tar
|
|
-
1x Liquified Crystal
-
1x Essentia Obscura
|
|
-
1x Liquified Crystal
-
1x Liquid Irradium
|
|
-
1x Liquified Crystal
-
1x Liquid Protocite
|
|
-
1x Liquified Crystal
-
1x Organic Soup
|
|
-
1x Liquified Crystal
-
1x Poison
|
|
-
1x Liquified Crystal
-
1x Sulphuric Acid
|
|
-
1x Liquified Crystal
-
1x Swamp Water
|
|
-
1x Liquified Crystal
-
1x Water
|
|
-
1x Loose Silt
-
1x Liquified Crystal
|
|
-
1x Purple Crystal Block
-
1x Liquified Crystal
|
|
-
1x Rough Dirt
-
1x Liquified Crystal
|
|
-
1x Sand
-
1x Liquified Crystal
|
|
-
1x Slime Glob
-
1x Liquified Crystal
|
|
-
1x Slimy Soil
-
1x Liquified Crystal
|
|
-
1x Waste
-
1x Liquified Crystal
|
|
How to obtain
Rock Crusher
|
|
-
Ice Crystal (0.1%/0.3%)
-
Kespar Crystal (0.1%/0.3%)
-
Lunari Shard (0.4%/1.25%)
-
Sivite (0.4%/1.25%)
-
Liquified Crystal (0.67%/1.83%)
-
Silicon (0.67%/1.83%)
-
Crystal (0.67%/1.83%)
-
Gravel (7%/20%)
|
Environment
Atmospheric Condenser
|
|
-
Organic Soup 15.8%
-
Crystal Sand 15.8%
-
Nitrogen 15.8%
-
Hydrogen 15.8%
-
Oxygen 15.8%
-
Crystal 4%
-
Liquified Crystal 4%
-
Potent Mutagene 4%
-
Carbon 4%
-
Silicon 4%
-
Ice Crystal 0.2%
-
Lunari Shard 0.2%
-
Tritium Rod 0.2%
-
Alien Compound 0.2%
-
Carbon Dioxide 0.2%
|
Animals
Apiary
|
|
-
Liquified Crystal (1/75)
-
Crystalline Honeycomb (1/300)
-
Crystal (1/100)
-
Feya Crystal (1/100)
-
Opul Crystal (1/100)
-
Emera Crystal (1/100)
-
Thanatite Crystal (1/100)
-
Upilite Crystal (1/100)
-
Tokanite Crystal (1/100)
-
Plasmic Crystal (1/2000)
-
Rainbow Wood (1/2500)
-
Alien Weird Wood (1/500)
|
|
|
-
Liquified Crystal (1/35)
-
Crystalline Honeycomb (1/300)
-
Crystal (1/400)
-
Feya Crystal (1/400)
-
Opul Crystal (1/400)
-
Emera Crystal (1/400)
-
Thanatite Crystal (1/400)
-
Upilite Crystal (1/400)
-
Tokanite Crystal (1/400)
-
Plasmic Crystal (1/1600)
-
Rainbow Wood (1/2000)
-
Alien Weird Wood (1/700)
|
Результаты до и после
Чем больше вы будете использовать фильтр «Пластика», тем больше успехов вы добьётесь. Со временем конечный итог всех ваших изменений и деформаций будет выглядеть настолько плавно и реалистично, что вы, вероятно, забудете, что и в каком месте вы изменили. Здесь же вы можете выбрать опцию Show Backdrop (Дополнительные параметры). Она позволяет обеим слоям отображаться друг над другом. Это своего рода наложение оригинала на изменённую версию. Посмотрите на левое плечо на скриншоте ниже.

Вы видите, как происходит наложение? Иногда легче работать с этой опцией, так как все изменения можно просмотреть более чётко. Кстати, флажок для этой опции находится в правом столбце под параметрами, о которых я говорил чуть ранее в этом уроке.

В нижней части панели параметров с правой стороны есть опция Preview (Предварительный просмотр). В процессе работы вы можете её активировать, а затем убрать флажок, чтобы контролировать свои изменения.
Когда вы закончите, нажмите OK, чтобы выйти из фильтра и вернуться в обычное рабочее пространство.
Чтобы добиться хороших результатов, работа с фильтром Liquify (Пластика) потребует некоторой сноровки. Но со временем вы поймёте, что работать с ним одно удовольствие. Чтобы внести изменения в своё изображение мне понадобилось 20 секунд. Если я смог это сделать, то вам это тоже под силу.
Надеюсь вы поняли принцип работы инструмента Forward Warp Tool (W) (Деформация) в рабочем пространстве фильтра Liquify (Пластика) в Фотошоп.
The method of testing
I measured the performance of Liquify with the help of the stats.js library. The test project created the given number of charts on the same page. At first it used Chart.js without webworkers, and then it used Liquify with webworkers. Then the charts connected to the test server, which started sending new data points to the charts. The test server ran with two different settings. At first it was set to produce a new data point every 100 millisecond. Then it was set to produce a new data point every 10 milliseconds. After the page was loaded, all the charts connected, and the charts received more than 10 seconds of data, I measured the average frame per second (FPS) of a 10-second time interval.
Перемещение мышц
На панели слева выберите инструмент Forward Warp Tool (W) (Деформация).

Теперь обратимся к правой панели с настройками. Сейчас я вам объясню, для чего предназначен каждый параметр.

- Size (Размер): параметр контролирует размер кисти, которой вы будете работать.
- Density (Плотность): определяет тип растушёвки по краям. Эффект получается более выраженный в центре и менее выраженный по краям кисти.
- Pressure (Нажим): управляет скоростью, с которой происходит деформация по мере перемещения кисти по изображению. При более высоком значении, деформирование будет происходить очень быстро. Более низкое означает, что независимо от того, как вы будете перемещать кисть, изображение будет деформироваться очень медленно. Более медленный процесс обеспечивает гораздо большую точность, в то время, как с более высоким значением работа выполняется быстрее.
Ползунки этих параметров я установил ближе к середине. Теперь я продемонстрирую вам способности этого инструмента. Я потяну наружу часть плеча спортсменки, чтобы мышца стала выглядеть больше.

Чтобы повторить то, что я только сделал, необходимо кликнуть и перетащить край плеча наружу
Я сделал это медленно и осторожно, чтобы избежать каких-либо искажений. Теперь давайте сделаем всё наоборот
Кликните и перетащите мышцу плеча внутрь, она будет казаться меньше, чем на самом деле.

Вы заметили разницу? Все действия я делаю нежно. Я не кликаю и не перетаскиваю всё одним разом
Делать это нужно осторожно в несколько этапов, чтобы избежать искажения окружающих областей
Requirements
The automated tests run in Google Chrome, so it should be installed on your computer.
Before starting the development of Liquify, the source code has to be cloned with a version control system, and its packages have to be installed by issuing the «npm install» command from the library of the workspace. There are 3 projects in the workspace:
- The liquify project contains the library itself. It is located in the projects/liquify folder. This includes the LiquifyComponent Angular component, that provides the API of the library, the ChartWorker class, that provides the code of the worker, the FunctionOverrideInterface interface, that can be overriden by the user, and its default implementation, the DefaultFunctionSources class.
- The test_server project can be found in the projects/liquify/src/test_server folder. This provides a locally runnable server, that can provide data to testing.
- The test-liquify project provides a simple Angular application, that can be found in the projects/test-liquify folder. It can be used to run tests, that include multiple charts on the same webpage.