Skip to content

Commit 95f705f

Browse files
committed
Fix task optimizeImages
1 parent 9b8fd37 commit 95f705f

File tree

3 files changed

+33
-29
lines changed

3 files changed

+33
-29
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,9 @@ _styles.scss_
137137
```
138138

139139
## Работа с графикой
140-
Абсолютно всю графику складывайте в `source/.raw`.
140+
Абсолютно всю растровую графику с двухкратной плотностью из макета складывайте в `source/.raw`. Здесь графика игнорируется гитом.
141141
После того как добавите графику сразу запускайте команду `npm run optimizeImages` для оптимизации графики и создания `.webp`-версии. Команду нужно запускать один раз при появлении новой графики в проекте.
142-
Новая оптимизированная графика появится в `source/images`.
142+
Новая оптимизированная графика разной плотностью и суффиксами плотности в именах файлов появится в `source/images`. Эту, уже оптимизированную графику нужно коммитить.
143143

144144
Векторную графику для спрайта складывайте в `source/images/icons/`. Автоматизация создаст из иконок файл `stack.svg`.
145145

gulpfile.js

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -48,31 +48,30 @@ export function processScripts () {
4848
}
4949

5050
export function optimizeImages () {
51-
return gulp.src('source/.raw/**/*.{png,jpg}')
52-
.pipe(sharp(isDevelopment ? {
53-
includeOriginalFile: true,
54-
formats: [
55-
{ format: 'webp' }
56-
]
57-
} : {
58-
formats: [
59-
{
60-
jpegOptions: {
61-
progressive: true,
62-
mozjpeg: true
51+
const RAW_DENSITY = 2;
52+
const TARGET_FORMATS = [undefined, 'webp']; // undefined — initial format: jpg or png
53+
54+
function createOptionsFormat() {
55+
const formats = [];
56+
57+
for (const format of TARGET_FORMATS) {
58+
for (let density = RAW_DENSITY; density > 0; density--) {
59+
formats.push(
60+
{
61+
format,
62+
rename: { suffix: `@${density}x` },
63+
width: ({ width }) => Math.ceil(width * density / RAW_DENSITY),
64+
jpegOptions: { progressive: true },
6365
},
64-
pngOptions: {
65-
palette: true
66-
}
67-
},
68-
{
69-
format: 'webp',
70-
webpOptions: {
71-
effort: 6
72-
}
73-
}
74-
]
75-
}))
66+
);
67+
}
68+
}
69+
70+
return { formats };
71+
}
72+
73+
return gulp.src('source/.raw/**/*.{png,jpg,jpeg}')
74+
.pipe(sharp(createOptionsFormat()))
7675
.pipe(gulp.dest('source/images'));
7776
}
7877

source/.raw/README.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
# Папка для оригиналов изображений
22

3-
Сюда нужно скидывать неоптимизированные `png` и `jpg` двойной плотности пикселей.
3+
Сюда нужно скидывать неоптимизированные `png` и `jpg` двойной плотности пикселей.
44

5-
При запуске `gulp`создаться в `source/images` оптимизированная копия с суффиксом `@2x`, а также уменьшенная в 2 раза копия без суффиксов. У обоих размеров будет копии в прогрессивных форматах (`webp` и `avif`).
5+
Для каждого изображения в этой папке запуск команды `npm run optimizeImages` создат в `source/images`:
66

7-
После оптимизации оригиналы картинок можно удалить.
7+
- оптимизированную копию с суффиксом `@2x`,
8+
- оптимизированную уменьшенную в 2 раза копию с суффиксом `@1x`,
9+
- копию в прогрессивном формате `webp` с суффиксом `@2x`,
10+
- уменьшенную в 2 раза копию в формате `webp` с суффиксом `@1x`.
11+
12+
После оптимизации оригиналы можно удалить, чтобы повторный запуск для новых изображений не генерировал заново уже имеющиеся файлы.

0 commit comments

Comments
 (0)