diff options
| author | Yasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com> | 2026-11-01 22:09:07 +0900 |
|---|---|---|
| committer | Yasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com> | 2026-11-01 22:09:07 +0900 |
| commit | 25237779af89ec78deedc63e7f75412bd7d01fde (patch) | |
| tree | 7ba2ef8bbbaddbb59874030e5715907474be6ea6 /public/bluebey-studio/src/panel.js | |
| parent | 9a48acc5eeab8f79062dc34a02b5ec292ebdf555 (diff) | |
bluebey: 注意書きに配布の条件を追加し、JPG保存を追加
Diffstat (limited to 'public/bluebey-studio/src/panel.js')
| -rw-r--r-- | public/bluebey-studio/src/panel.js | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/public/bluebey-studio/src/panel.js b/public/bluebey-studio/src/panel.js index db784cb..c798d42 100644 --- a/public/bluebey-studio/src/panel.js +++ b/public/bluebey-studio/src/panel.js @@ -2109,7 +2109,7 @@ export function buildPanel(app, root) { const exportSection = section(tabExport, '画像'); exportSection.add(segmented({ - label: 'PNGの大きさ', + label: '画像の大きさ', options: [ { value: '1', label: '1倍' }, { value: '2', label: '2倍' }, @@ -2122,9 +2122,17 @@ export function buildPanel(app, root) { exportSection.add(buttons({ items: [ { id: 'png', label: 'PNGを保存', primary: true, onClick: () => app.actions.savePNG() }, + { id: 'jpg', label: 'JPGを保存', onClick: () => app.actions.saveJPG() }, { id: 'copy', label: 'クリップボードにコピー', onClick: () => app.actions.copyPNG() }, ], })); + const jpgQualitySlider = slider({ + label: 'JPGの画質', min: 0.5, max: 1, step: 0.01, value: 0.9, + format: (v) => `${Math.round(v * 100)}%`, + onInput: (v) => { state.render.jpgQuality = v; }, + }); + exportSection.add(jpgQualitySlider.el); + exportSection.add(hint('JPG は PNG よりファイルが小さくなります(写真の背景を入れた絵に向いています)。JPG は透明にできないので、背景は「紙の色」で塗られます。')); const transparentCheck = check({ label: 'PNGの背景を透明にする', value: false, onChange: (v) => { state.render.pngTransparent = v; }, @@ -2377,6 +2385,7 @@ export function buildPanel(app, root) { outlinePixelsSlider.set(state.render.outlinePixels ?? 2); leafBodyLineCheck.set(state.render.leafBodyLine !== false); transparentCheck.set(state.render.pngTransparent); + jpgQualitySlider.set(state.render.jpgQuality ?? 0.9); lightPad.set({ x: state.render.lightAzimuth / 180, y: Math.max(0, (state.render.lightElevation - 5) / 80), |
