Update to visioncortex 0.4.0

This commit is contained in:
Chris Tsang
2020-12-19 01:34:01 +08:00
parent bb3b66780b
commit 433a68d6d6
8 changed files with 39 additions and 24 deletions

View File

@@ -1,6 +1,6 @@
[package]
name = "vtracer"
version = "0.2.0"
version = "0.2.1"
authors = ["Chris Tsang <tyt2y7@gmail.com>"]
edition = "2018"
description = "A cmd app to convert images into vector graphics."
@@ -13,4 +13,4 @@ keywords = ["svg", "computer-graphics"]
[dependencies]
clap = "2.33.3"
image = "0.23.10"
visioncortex = "0.3.0"
visioncortex = "0.4.0"

View File

@@ -1,7 +1,7 @@
use std::str::FromStr;
use std::path::PathBuf;
use clap::{Arg, App};
use visioncortex::path::PathSimplifyMode;
use visioncortex::PathSimplifyMode;
pub enum Preset {
Bw,

View File

@@ -1,7 +1,8 @@
use std::path::PathBuf;
use std::{fs::File, io::Write};
use visioncortex::{Color, ColorImage, ColorName, color_clusters::RunnerConfig, color_clusters::Runner};
use visioncortex::{Color, ColorImage, ColorName};
use visioncortex::color_clusters::{Runner, RunnerConfig, HIERARCHICAL_MAX};
use super::config::{Config, ColorMode, ConverterConfig};
use super::svg::SvgFile;
@@ -26,6 +27,8 @@ fn color_image_to_svg(config: ConverterConfig) -> Result<(), String> {
}
let runner = Runner::new(RunnerConfig {
diagonal: config.layer_difference == 0,
hierarchical: HIERARCHICAL_MAX,
batch_size: 25600,
good_min_area: config.filter_speckle_area,
good_max_area: (width * height),

View File

@@ -22,7 +22,7 @@ console_log = { version = "0.2", features = ["color"] }
wasm-bindgen = { version = "0.2", features = ["serde-serialize"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
visioncortex = "0.3.0"
visioncortex = "0.4.0"
# The `console_error_panic_hook` crate provides better debugging of panics by
# logging them with `console.error`. This is great for development, but requires

View File

@@ -98,19 +98,6 @@ var presetConfigs = [
source: 'https://www.vectorstock.com/royalty-free-vector/dessert-poster-design-with-chocolate-cake-mousses-vector-31191940',
credit: '<a href="https://www.vectorstock.com/royalty-free-vector/dessert-poster-design-with-chocolate-cake-mousses-vector-31191940">Vector image by VectorStock / vectorstock</a>',
},
{
src: 'assets/samples/averie-woodard-4nulm-JUYFo-unsplash-s.jpg',
clustering_mode: 'color',
filter_speckle: 8,
color_precision: 7,
layer_difference: 24,
mode: 'spline',
corner_threshold: 60,
length_threshold: 4,
splice_threshold: 45,
source: 'https://unsplash.com/photos/4nulm-JUYFo',
credit: '<span>Photo by <a href="https://unsplash.com/@averieclaire?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">averie woodard</a> on <a href="https://unsplash.com/s/photos/portrait?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>',
},
{
src: 'assets/samples/angel-luciano-LATYeZyw88c-unsplash-s.jpg',
clustering_mode: 'color',
@@ -124,10 +111,23 @@ var presetConfigs = [
source: 'https://unsplash.com/photos/LATYeZyw88c',
credit: '<span>Photo by <a href="https://unsplash.com/@roaming_angel?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Angel Luciano</a> on <a href="https://unsplash.com/s/photos/dog?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>',
},
{
src: 'assets/samples/tank-unit-preview.png',
clustering_mode: 'color',
filter_speckle: 0,
color_precision: 8,
layer_difference: 0,
mode: 'none',
corner_threshold: 180,
length_threshold: 4,
splice_threshold: 45,
source: 'https://opengameart.org/content/sideview-sci-fi-patreon-collection',
credit: '<span>Artwork by <a href="https://opengameart.org/content/sideview-sci-fi-patreon-collection">Luis Zuno</a> on <a href="https://opengameart.org/">opengameart.org</a></span>',
},
];
// Insert gallery items dynamically
for (let i = 0; i < presetConfigs.length; ++i) {
for (let i = 0; i < presetConfigs.length; i++) {
document.getElementById('galleryslider').innerHTML +=
`<li>
<div class="galleryitem uk-panel uk-flex uk-flex-center">
@@ -322,9 +322,19 @@ window.addEventListener('beforeunload', function () {
function setSourceAndRestart(source) {
img.src = source instanceof File ? URL.createObjectURL(source) : source;
img.onload = function () {
svg.setAttribute('viewBox', `0 0 ${img.naturalWidth} ${img.naturalHeight}`);
const width = img.naturalWidth, height = img.naturalHeight;
svg.setAttribute('viewBox', `0 0 ${width} ${height}`);
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
if (height > width) {
document.getElementById('canvas-container').style.width = '50%';
document.getElementById('canvas-container').style.marginBottom = (height / width * 50) + '%';
} else {
document.getElementById('canvas-container').style.width = '';
document.getElementById('canvas-container').style.marginBottom = (height / width * 100) + '%';
}
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
ctx.getImageData(0, 0, canvas.width, canvas.height);
restart();
}
// Show display

View File

@@ -46,7 +46,7 @@ impl Canvas {
image.data().to_vec()
}
pub fn get_image_data_as_image(&self, x: u32, y: u32, width: u32, height: u32) -> ColorImage {
pub fn get_image_data_as_color_image(&self, x: u32, y: u32, width: u32, height: u32) -> ColorImage {
ColorImage {
pixels: self.get_image_data(x, y, width, height),
width: width as usize,

View File

@@ -54,7 +54,7 @@ impl BinaryImageConverter {
pub fn init(&mut self) {
let width = self.canvas.width() as u32;
let height = self.canvas.height() as u32;
let image = self.canvas.get_image_data_as_image(0, 0, width, height);
let image = self.canvas.get_image_data_as_color_image(0, 0, width, height);
let binary_image = image.to_binary_image(|x| x.r < 128);
self.clusters = binary_image.to_clusters(false);
self.canvas.log(&format!(

View File

@@ -1,6 +1,6 @@
use wasm_bindgen::prelude::*;
use visioncortex::PathSimplifyMode;
use visioncortex::color_clusters::{IncrementalBuilder, Clusters, Runner, RunnerConfig};
use visioncortex::color_clusters::{IncrementalBuilder, Clusters, Runner, RunnerConfig, HIERARCHICAL_MAX};
use crate::canvas::*;
use crate::svg::*;
@@ -64,8 +64,10 @@ impl ColorImageConverter {
pub fn init(&mut self) {
let width = self.canvas.width() as u32;
let height = self.canvas.height() as u32;
let image = self.canvas.get_image_data_as_image(0, 0, width, height);
let image = self.canvas.get_image_data_as_color_image(0, 0, width, height);
let runner = Runner::new(RunnerConfig {
diagonal: self.params.layer_difference == 0,
hierarchical: HIERARCHICAL_MAX,
batch_size: 25600,
good_min_area: self.params.filter_speckle,
good_max_area: (width * height) as usize,