Szkriptek: Python, Perl, Bash, ...

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.

Python könyv (fizikai) kerestetik

Üdv!

 

Fizikai python könyvet keresek.

 

Ami fontos, hogy legalább 3.6-os, de inkább 3.8(+)-os verzióhoz legyen.

Meg lehessen venni könyvesboltban, mert lehetőleg szombatig szeretném megszerezni (Budapest).

Bár rég olvastam magyarul bármiféle szakirodalmat, most nem lennék ellene.

 

Ha fentiek nem mennek, de valakinek éppen van valami elfekvő, amit át / meg lehet venni, arra is nyitott vagyok.

 

 

 

Köszönöm.

Keresek egy python oktató anyagot

Valaha, mittudomén, 20 éve, amikor elhatároztam, hogy Python-t fogok használni bizonyos dolgokra, egy gyors Google kereséssel találtam egy weboldalt, ami tartalmazott néhány fejezetet, ami bemutatta, hogyan lehet Pythonban programozni. Simán lehet, hogy ez egy könyv tartalma volt online formában.

Arra emlékszem, hogy úgy indult, hogy python mint számológép. Aztán bemutatta, hogyan lehet egy függvényt definiálni, és erre egy fibonacci számoló rutint használt, azt ciklusból rekurzívan hívta.

Aztán általános dolgok jöttek, amikre nem emlékszem már ennyire részletesen.

Kb. 8 éve, amikor a fiam akart programozással ismerkedni, Google újra kiköpte ezt az oldalt, és másodjára is jó volt.

A lényeg az, hogy mostanában nem találom ezt a weboldalt / könyvet.

Google ad egy csomó találatot, és bizonyára sok nagyon jó ezek közül, de én azt a bizonyosat keresem.

Tudja esetleg valaki, hogy miről beszélek?

Python - Google API Client - conflict

Sziasztok,

Generált a Copilot egy Python szkriptet. 

Már az első sor hibára fut:

from googleapiclient.discovery import build

A hibaüzenet:

ImportError: Module use of python38.dll conflicts with this version of Python.

pip-pel telepítettem a modult, sikeresen le is futott. 

Próbáltam már ezerféleképpen, az istennek nem akar működni.

python --version
Python 3.13.1

pip --version
pip 24.3.1

Egy kis AWK segítség kérés

Sziasztok,

Próbáltam AWK scriptet írni, de nagyon nem ment, ezért megkértem a ChatGPT-t, hogy írja meg nekem. Az adott feladat, egy program kimenetét feldolgozni az alábbi módon:

1. sor nem kell, átlépjük
minden további sorban az első két mező elválasztása " " szóköz mentén, míg az utolsó rész ami egy - jel után van legyen a harmadik mező.

példa:

pelda.txt

    Header1 Header2 - Egyszó
Valami     Szöveg - Több szó is lehet
Másik Sor - Még egy hosszabb kifejezés - van benne kötőjel

A hozzátartozó AWK script:

awk 'NR > 1 { 
    # Az első két szót (szöveg1, szöveg2) elválasztjuk
    split($1, arr1, " ");  # A szöveg1-t és szöveg2-t első lépésben szétválasztjuk
    split($2, arr2, " ");  # A szöveg2 után is szétválasztjuk
    # Azokat az adatokat, amik a "-" után vannak, egy változóba tesszük
    text = substr($0, index($0, " - ") + 3)  # A "-" utáni szöveget változóba tesszük
    print arr1[1],",",arr2[1], ",", text  # Kinyomtatjuk az első két szót és a kifejezést
}' pelda.txt

Lehet ezt egyszerűsíteni, vagy "jóvanazúgy"? :)

Terraform: változók átadása

Sziasztok,

root modul:

module "resource_group" {
  for_each                                  =  var.customers
  source                                     =  "./modules/resource_group"
  customer_name                       =  each.value.name
  subscription_location                =  var.subscription.location
  subscription_locationshortname =  var.subscription.locationshortname
  subscription_environment         =  var.subscription.environment
  tags_owner                             =  var.tags.owner
  tags_deployed_by                    =  var.tags.deployedby
  tags_deployment_date             =  var.tags.deploymentdate 
  tags_cost_center                     =  var.tags.costcenter
  tags_snow_fgroup                    =  var.tags.snowfgroup
}

module "key_vault" {
  for_each                           =  module.resource_group.resource_group_name
  source                              =  "./modules/key_vault" 
  location                            =  module.resource_group.resource_group_location
  resource_group_name       =  module.resource_group.resource_group_name
  tenant_id                         =  var.subscription.tenantid
  tags_owner                      =  var.tags.owner
  tags_deployed_by             =  var.tags.deployedby
  tags_deployment_date      =  var.tags.deploymentdate 
  tags_cost_center              =  var.tags.costcenter
  tags_snow_fgroup            =  var.tags.snowfgroup
  depends_on = [
    module.resource_group.resource_group_name
  ]
}
 

resource_group output.tf-je:

output "resource_group_name" { value = azurerm_resource_group.rg.name }
output "resource_group_location" { value = azurerm_resource_group.rg.location }

plan kimenet:

│ Error: Invalid value for input variable │ │ on main.tf line 24, in module "key_vault": │ 24: location = module.resource_group.resource_group_location │ │ The given value is not suitable for module.key_vault.var.location declared at modules\key_vault\variables.tf:7,1-20: │ string required. ╵ ╷
│ Error: Invalid value for input variable │ │ on main.tf line 25, in module "key_vault": │ 25: resource_group_name = module.resource_group.resource_group_name │
│ The given value is not suitable for module.key_vault.var.resource_group_name declared at │ modules\key_vault\variables.tf:12,1-31: string required.

Mit ronthattam el?

Köszönöm!

[Megoldva]Python - Qt - PDF

Sziasztok,

A kérdés egyszerű: miért nem működik a következő kód?

from reportlab.pdfgen import canvas
from io import BytesIO
from PyQt6.QtCore import QBuffer, QIODevice
from PyQt6.QtPdf import QPdfDocument
from PyQt6.QtPdfWidgets import QPdfView
from PyQt6.QtWidgets import QApplication, QVBoxLayout, QWidget


def create_pdf_in_qbuffer():
    pdf_buffer = BytesIO()
    c = canvas.Canvas(pdf_buffer)
    c.drawString(100, 750, "Hello, ReportLab in QBuffer!")
    c.save()

    pdf_buffer.seek(0)

    # Save for debugging
    with open("debug_output.pdf", "wb") as f:
        f.write(pdf_buffer.getvalue())

    qbuffer = QBuffer()
    qbuffer.open(QIODevice.OpenModeFlag.WriteOnly)
    qbuffer.write(pdf_buffer.read())
    qbuffer.close()
    qbuffer.open(QIODevice.OpenModeFlag.ReadOnly)
    return qbuffer


def create_qpdfdocument_from_qbuffer(qbuffer):
    if qbuffer.size() == 0:
        print("Error: QBuffer is empty.")
        return None

    pdf_document = QPdfDocument(None)
    load_status = pdf_document.load(qbuffer)
    if load_status != QPdfDocument.Status.Ready:
        print("Failed to load PDF document. Status:", load_status)
        return None

    return pdf_document


def main():
    app = QApplication([])

    qbuffer = create_pdf_in_qbuffer()
    pdf_document = create_qpdfdocument_from_qbuffer(qbuffer)
    if pdf_document is None:
        print("Error: Could not create QPdfDocument")
        return

    pdf_view = QPdfView()
    pdf_view.setDocument(pdf_document)

    window = QWidget()
    layout = QVBoxLayout(window)
    layout.addWidget(pdf_view)
    window.setWindowTitle("QPdfDocument from QBuffer (Qt6)")
    window.resize(800, 600)
    window.show()

    app.exec()


if __name__ == "__main__":
    main()

[Megoldva] Find parancs találatában speciális karakter van, és ez miatt megáll

Sziasztok. Olyan problémába ütköztem, hogy szerettem volna egy olyan parancsot megírni és futtatni, ami egy megadott útvonalon rekurzívan megkeresi az összes jpg, jpeg, png kiterjesztésű filet, majd ezeknek a fileoknak az exif adataiból kikeresi az orientetion adatát, majd ha nem üres és nem egyenlő eggyel, akkor írja ki ezt a file nevet (a végső cél egy konverzió lesz, de egyelőre kiiratni akartom, mert hibára fut).Az alábbi parancs lett a végeredmény:
 

find "/home/Data/Pictures" -type f \( -iname \*.jpg -o -iname \*.jpeg -o -iname \*.png \) | parallel 'orientation="$(identify -format '%[EXIF:Orientation]\n' -- "{}" 2> /dev/null)"; if [ -n "$orientation" ] && [ "$orientation" != 1 ]; then echo "{}"; fi'

Ez le is futna rendben, ahogy egy apró tesztben kipróbáltam, viszont mikor az éles könyvtáron akartam kipróbálni, akkor jött egy hibaüzenet x másodperc múlva, miszerint a "Fender '62 Jaguar.jpg" -vel gondja van. És nem csoda, mert van benne egy ' jel, ami speciális karakternek minősül, és ezért pukkan meg.
Hogyan kellene kiegészíteni ezt a parancsot, hogy a speciális karaktereket ne annak értelmezze, hanem a file részének?

Alapvetően a cél a következő lenne:
Egy megadott útvonalon rekurzívan az összes képet keresse meg (mondjuk jpg, jpeg, png kiterjesztés, de tőlem mime alapján is kikeresheti az összes képformátumot), és amit talált képet, azon meg kell vizsgálnia, hogy az EXIF Orientation értéke van/létezik, és az nem egyenlő eggyel. Ha ilyet talál, akkor le kell futtatnia azon a fotón a következő parancsot: convert path/to/file -auto-orient /path/to/file

Mind az útvonal, mind a filenevek tartalmaznak speciális karaktereket.

A Discord botom nem válaszol a parancsokra

Sziasztok! Elkezdtem fejlesztgetni egy Discord botot python programozási nyelvben a discord.py használatával. Eddig hibátlanul működött most meg fogta azt nem működöik. Mikor lefutattom a python fájlt a bot csatlakozik a Discord-hoz de a parancsai nem működnek beírhatom bármelyiket nem válaszol egyikre sem, ha beírok egy olyan parancsot ami nem is létezik arra sem ír hibát a konzol pedig kéne neki. Visual studio code-ban írom és az se talál semmilyen hibát a kódban.Valaki tud valami magyarázatot arra és esetleg megoldást is hogy mi lehet a probléma?