Kép tömörítése nem megy
Segítsetek kérlek. Viszonylag egyszerű feladatot szerettem volna megoldani. Egy könyvtárban lévő jpg képeket akartam konvertálni, úgy hogy max 500KB legyen a fájl mérete. Persze kérdeztem a jóbarátomat a chatgpt-t is, de sajnos nem sikerült megoldani, hogy egy nagyon nagy méretű és felbontású képet tömörítsen/átméretezzen. És íme a szkript:
#!/bin/bash
# Maximális fájlméret bájtban (500 KB)
MAX_SIZE=512000
# Minőségi beállítások
QUALITY_START=85
QUALITY_MIN=40
QUALITY_STEP=5
# Átméretezési korlátok
MAX_WIDTH=1600
MAX_HEIGHT=1600
# Iterálás a .jpg fájlokon az aktuális könyvtárban
for FILE in *.jpg; do
# Ellenőrizzük, hogy tényleg létezik-e fájl
if [ ! -f "$FILE" ]; then
echo "Nincsenek .jpg fájlok az aktuális könyvtárban."
exit 1
fi
# Fájl méretének ellenőrzése
FILE_SIZE=$(stat -c%s "$FILE")
if [ "$FILE_SIZE" -le "$MAX_SIZE" ]; then
echo "✔️ Már megfelelő méretű: $FILE"
continue
fi
echo "⚙️ Feldolgozás: $FILE"
# Új fájlnév létrehozása _converted utótaggal
NEW_FILE="${FILE%.*}_converted.jpg"
# Ideiglenes fájl létrehozása
TEMP_FILE="${NEW_FILE}_temp.jpg"
cp "$FILE" "$TEMP_FILE"
# Kép felbontásának lekérdezése
IMAGE_WIDTH=$(identify -format "%w" "$TEMP_FILE")
IMAGE_HEIGHT=$(identify -format "%h" "$TEMP_FILE")
# Ha a kép szélessége vagy magassága túl nagy, akkor átméretezzük
if [ "$IMAGE_WIDTH" -gt "$MAX_WIDTH" ] || [ "$IMAGE_HEIGHT" -gt "$MAX_HEIGHT" ]; then
echo "🔄 Átméretezés szükséges: $FILE"
convert "$TEMP_FILE" -resize "${MAX_WIDTH}x${MAX_HEIGHT}" "$TEMP_FILE"
fi
# Minőség csökkentése + átméretezés
QUALITY=$QUALITY_START
while [ "$QUALITY" -ge "$QUALITY_MIN" ]; do
# Próbálunk minőséget csökkenteni
convert "$TEMP_FILE" -sampling-factor 4:2:0 -strip -quality "$QUALITY" "$TEMP_FILE"
# Fájl méretének újraellenőrzése
NEW_SIZE=$(stat -c%s "$TEMP_FILE")
if [ "$NEW_SIZE" -le "$MAX_SIZE" ]; then
mv "$TEMP_FILE" "$NEW_FILE"
echo "✅ Sikeresen tömörítve: $NEW_FILE (Új méret: $((NEW_SIZE / 1024)) KB)"
break
fi
QUALITY=$((QUALITY - QUALITY_STEP))
done
# Ha nem sikerült 500 KB alá csökkenteni, törlés
if [ "$QUALITY" -lt "$QUALITY_MIN" ]; then
echo "⚠️ Nem sikerült 500 KB alá csökkenteni: $FILE"
rm "$TEMP_FILE"
fi
done
A hiba: ⚙ Feldolgozás: 01 Előtte.jpg
🔄 Átméretezés szükséges: 01 Előtte.jpg
⚠ Nem sikerült 500 KB alá csökkenteni: 01 Előtte.jpg
A fájl amibe beletörik a bicskája a 01 Előtte.jpg egy 3056x3056 állomány, mérete pedig 3.0MiB
Persze, ha valakinek van tuti műkődő snipeete aminek nem törik bele a bicskája az ekkora állományokba és megosztja itt velem azt is nagyon szépen megköszönöm.
Köszönöm az ötleteket.
Szerk. A célom, hogy weben jelenítsem meg a képeket és ehhez szeretném konvertálni. Lehet tehát webp is a formátum.
- Tovább (Kép tömörítése nem megy)
- 957 megtekintés