Files
compress/internal/domain/entities/config.go
Dmitriy Fofanov ec65cfd05a Достижение: Добавлены скрипты и документация для релиза PDF Compressor.
- Добавлен release-body.md для подробных заметок о релизе на русском языке.
- Реализован release-gitea.ps1 для автоматизированного релиза Gitea с помощью PowerShell.
- Создан release-gitea.sh для автоматизированного релиза Gitea с помощью Bash.
- Добавлен release.sh для сборки и маркировки релизов с поддержкой нескольких платформ.
- Улучшен пользовательский интерфейс благодаря информативному логированию и обработке ошибок.
- Добавлена ​​поддержка переменных окружения и управления конфигурацией.
- Добавлена ​​функция создания архивов и загрузки ресурсов в Gitea.
2025-11-05 09:33:12 +03:00

89 lines
2.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package entities
// CompressionConfig представляет конфигурацию сжатия
type CompressionConfig struct {
Level int // Уровень сжатия (10-90)
ImageQuality int // Качество изображений (10-100)
ImageCompression bool // Сжимать изображения
RemoveDuplicates bool // Удалять дубликаты объектов
CompressStreams bool // Сжимать потоки данных
RemoveMetadata bool // Удалять метаданные
RemoveAnnotations bool // Удалять аннотации
RemoveAttachments bool // Удалять вложения
OptimizeForWeb bool // Оптимизировать для веб
UniPDFLicenseKey string // Лицензионный ключ для UniPDF
}
// NewCompressionConfig создает конфигурацию сжатия на основе уровня
func NewCompressionConfig(level int) *CompressionConfig {
return NewCompressionConfigWithLicense(level, "")
}
// NewCompressionConfigWithLicense создает конфигурацию сжатия с лицензионным ключом
func NewCompressionConfigWithLicense(level int, licenseKey string) *CompressionConfig {
if level < 10 {
level = 10
}
if level > 90 {
level = 90
}
config := &CompressionConfig{
Level: level,
RemoveDuplicates: true,
CompressStreams: true,
OptimizeForWeb: true,
UniPDFLicenseKey: licenseKey,
}
switch {
case level <= 20: // Слабое сжатие
config.ImageQuality = 90
config.ImageCompression = true
config.RemoveMetadata = false
config.RemoveAnnotations = false
config.RemoveAttachments = false
case level <= 40: // Умеренное сжатие
config.ImageQuality = 75
config.ImageCompression = true
config.RemoveMetadata = true
config.RemoveAnnotations = false
config.RemoveAttachments = false
case level <= 60: // Среднее сжатие
config.ImageQuality = 60
config.ImageCompression = true
config.RemoveMetadata = true
config.RemoveAnnotations = true
config.RemoveAttachments = false
case level <= 80: // Высокое сжатие
config.ImageQuality = 40
config.ImageCompression = true
config.RemoveMetadata = true
config.RemoveAnnotations = true
config.RemoveAttachments = true
default: // Максимальное сжатие (81-90%)
config.ImageQuality = 25
config.ImageCompression = true
config.RemoveMetadata = true
config.RemoveAnnotations = true
config.RemoveAttachments = true
}
return config
}
// Validate проверяет корректность конфигурации
func (c *CompressionConfig) Validate() error {
if c.Level < 10 || c.Level > 90 {
return ErrInvalidCompressionLevel
}
if c.ImageQuality < 10 || c.ImageQuality > 100 {
return ErrInvalidImageQuality
}
return nil
}