Skip to content

Commit e839fdb

Browse files
committed
✨ スクリーンショットをjpgで保存できるように
1 parent 5487204 commit e839fdb

File tree

4 files changed

+27
-4
lines changed

4 files changed

+27
-4
lines changed

src/atoms/settings.ts

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export const screenshotSetting = atom<ScreenshotSetting>({
4444
default: {
4545
saveAsAFile: true,
4646
includeSubtitle: true,
47+
keepQuality: true,
4748
},
4849
})
4950

src/components/contentPlayer/VideoPlayer.tsx

+8-2
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,11 @@ export const CoiledVideoPlayer: React.VFC<{}> = memo(() => {
191191
)
192192
}
193193
const blob = await new Promise<Blob | null>((res) =>
194-
contentCanvas.toBlob((blob) => res(blob), "image/png", 1)
194+
contentCanvas.toBlob(
195+
(blob) => res(blob),
196+
screenshot.keepQuality ? "image/png" : "image/jpeg",
197+
screenshot.keepQuality ? 1 : 0.95
198+
)
195199
)
196200
if (!blob) throw new Error("blob")
197201
const buffer = await blob.arrayBuffer()
@@ -217,7 +221,9 @@ export const CoiledVideoPlayer: React.VFC<{}> = memo(() => {
217221
]
218222
.filter((s) => s)
219223
.join("_")
220-
const fileName = `${baseName}.png`
224+
const fileName = `${baseName}.${
225+
screenshot.keepQuality ? "png" : "jpg"
226+
}`
221227
const filePath = path.join(screenshot.basePath, fileName)
222228
await window.Preload.public.writeFile({
223229
path: filePath,

src/components/settings/general/Screenshot.tsx

+17-2
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,31 @@ export const ScreenshotSettingForm: React.VFC<{
1313
screenshotSetting.includeSubtitle
1414
)
1515
const [basePath, setBasePath] = useState(screenshotSetting.basePath)
16+
const [keepQuality, setKeepQuality] = useState(screenshotSetting.keepQuality)
1617
useDebounce(
1718
() => {
18-
setScreenshotSetting({ saveAsAFile, basePath, includeSubtitle })
19+
setScreenshotSetting({
20+
saveAsAFile,
21+
basePath,
22+
includeSubtitle,
23+
keepQuality,
24+
})
1925
},
2026
100,
21-
[saveAsAFile, basePath, includeSubtitle]
27+
[saveAsAFile, basePath, includeSubtitle, keepQuality]
2228
)
2329
return (
2430
<div>
2531
<p className="text-lg">スクリーンショットの設定</p>
32+
<label className="block mt-4">
33+
<span>スクリーンショットを圧縮しない</span>
34+
<input
35+
type="checkbox"
36+
className="block mt-2 form-checkbox"
37+
checked={keepQuality}
38+
onChange={() => setKeepQuality((enabled) => !enabled)}
39+
/>
40+
</label>
2641
<label className="block mt-4">
2742
<span>ファイルに保存する</span>
2843
<input

src/types/setting.ts

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export type ScreenshotSetting = {
1717
saveAsAFile: boolean
1818
includeSubtitle: boolean
1919
basePath?: string
20+
keepQuality: boolean
2021
}
2122

2223
export type ExperimentalSetting = {

0 commit comments

Comments
 (0)