Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: memoria script

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    141

    memoria script

    ciao a tutti, eccomi tornato con nuove e fantastiche domande.

    beccatevi questa.
    nel mio bel (anzi bellissimo) script creo delle thumbnail da foto originali, funziona tutto a meraviglia, io do le misure e le funzioni delle librerie GD fanno il resto.
    il mio problema è però che ho messo online il mio sito su aruba, con servizio mysql ecc...
    quindi, il mio problema, è che le funzioncine ciuciano un sacco di memoria, ed io a disposizione ho solo 12 MB, non è che le mie foto siano particolarmente pesanti, anche loro, poverine, pesano dai 600 ai 1200 Kb.
    eco la mia domanda:
    come posso gestire la memoria, sapere quanta me ne sta ciucciando?
    come posso fare le stesse operazioni utilizzando meno memoria?
    ci sono per caso altre librerie che sono più ganze?

    l'errore me lo segnala alla riga che recita:
    $source = imagecreatefromjpeg($filename);

    codice:
    function thumb($path, $readPath)
    {
    	$latoMaggiore=225;
    	$qualityFoto=40;
    	$filename=$path.$readPath;
    	$nameThumb="thu_$readPath";
    	$newDestTumb='prew\\';
    	$thumbDest=$path.$nameThumb;
    	//header('Content-type: image/jpeg');
    	list($width, $height) = getimagesize($filename);
    	if($width>$height)
    	{
    		$newheight=($height/$width)*$latoMaggiore;
    		$newwidth=$latoMaggiore;
    	}
    	else
    	{
    		$newheight=$latoMaggiore;
    		$newwidth=($width/$height)*$latoMaggiore;
    	}
    	$thumb = imagecreatetruecolor($newwidth, $newheight);
    	$source = imagecreatefromjpeg($filename);
    	imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    	imagejpeg($thumb, $thumbDest, $qualityFoto);
    	imageDestroy($thumb);
    	imageDestroy($source);
    	$thumbSize=filesize($thumbDest);
    	return $thumbSize;
    }
    ciao a tutti e grazie mille per la solita attenzione.

  2. #2
    allora ... non ha la benché minima importanza la dimensione fisica del file

    in memoria l'immagine è una semplice mappa di bit ... o una "bitmap" (da cui deriva anche il formato Bitmap delle immagini)

    per sapere quando occupa puoi fare un calcolo semplicissimo

    Larghezza * Altezza * (Bits / 8)

    Bits = 1, 4, 8, 16, 24, 32

    con le jpg se non erro va solo 32 di conseguenza puoi direttamente fare

    Larghezza * Altezza * 4

    comunque ricordati che in memoria oltre a questo ci stanno svariate informazioni aggiuntive che permettono di conservare le immagini sull'informazione stessa come la largezza, l'altezza, bits, eventuali tag exif, metodo e livello di compressione ed altra roba varia

    tu inoltre fai un ridimensionamento quindi hai sia la prima immagine sia la seconda

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    141
    grazie daniele_dll
    sei stato chiarissimo.
    ho fatto i conti come dici e solo di foto mi viene 12Mb + le varie informazioni e l'altra immagine, che per quanto piccola è di 400X300 ca.
    esempio ho un'immagine 2048 * 1536, moltiplico ancora per 32 e ho i bits, se moltiplico anzichè per 32 per 4 ho i Bytes, giusto? divido ancora per 1024 e ho i Kbytes e divido ulteriormente per 1024 per avere i MB, corretto?
    cioè l'esempio sopra mi porta ad avere 12MB solo per la foto.

    mi sembra di avre capito.
    ti ringrazio molto, creerò le thumb sul mio computer e poi le mando in ftp.

    grazie ancora
    matteo

  4. #4
    puoi anche usare software "esterni" per aggirare il problema

    dai un'occhiata alle imagemagik

  5. #5
    Originariamente inviato da daniele_dll
    Bits = 1, 4, 8, 16, 24, 32

    con le jpg se non erro va solo 32 di conseguenza puoi direttamente fare

    Larghezza * Altezza * 4
    Le JPEG non hanno canale Alpha, sono a 24 bit che io sappia.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460
    A dire il vero assumere che una immagine X x Y a n bit occupi XxYxn/8 byte in memoria e' una affermazione del tutto campata in aria. Che occupi quello spazio nella memoria della scheda video e' sicuramente vero, ma non sta scritto da nessuna parte che una immagine venga mantenuta in memoria decompressa, ne' che nel trattamento della stessa questa venga mantenuta decompressa per intero.

    Se dovessi fare una classe JPGImage, terrei un buffer interno con i dati compressi, e quando dovessi visualizzarla farei il deconding al volo.

    Dovendo poi fare operazioni su delle porzioni dell'immagine, a seconda dell'algoritmo utilizzato e' del tutto plausibile pensare che venga decodificata solo la porzione di immagine necessaria.

    E' evidente che software come Photoshop mantiene in memoria l'immagine decompressa, perche' per lo scopo dell'applicazione e' necessario sacrificare il consumo di memoria per avere performance migliori, ma gli algoritmi possono essere i piu' disaparati.
    There are 10 types of people in the world - those who understand binary and those who don't.

  7. #7
    Originariamente inviato da skidx
    Le JPEG non hanno canale Alpha, sono a 24 bit che io sappia.

    per fortuna ho detto se non erro

    ... ok ... occupano un byte in meno per pixel

    @frinkia:

    prima di esordire con queste affermazioni studiati documenti riguardanti l'elaborazione grafica e il funzionamento dei dispositivi e software di visualizzazione pls

    1° Qui non si parla di visualizzare ma di elaborare
    2° quando riuscirai a scrivermi un'algorittimo che partendo da una jpeg compressa mi la ridimensiona senza però decomprimerla in memoria fammi un fischio che mi compro una licenza per l'algorittimo
    3° in php sarebbe totalmente inutile una classe che si occupi di visualizzare le JPEG come qualsiasi altra cosa dato che basta inviare i dati al browser ... dati compressi nel proprio formato
    4° I software come photoshop non tengono in memoria l'immagine perché gli conviene ma perché la parte visualizzata deve essere tenuta cosi e in base al sistema che usano hanno qualche piccola possibilità di variare

    inoltre ti vorrei far notare una cosa molto importante:
    se hai l'immaigne compressa in memoria ... visualizzi un pezzo ... ti sposti di un pixel a sinistra ... cosa fai ... ridecomprimi TUTTO per visualizzare una colonna?

    io parlo per esperienza perché per lavoro ho dovuto scrivere svariati software che lavoravano con le immagini ... dalla scansione alla gestione ad un piccolo software di visualizzazione con funzionalità di grafica vettoriale ... tutti quanti estremamente performanti anche su macchine ridotte e ti assicuro che è NECESSARIO tenere in memoria l'intera immagine decompressa

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    141
    graie raga, non volevo catenare tanto casino, un po' mi dispiace, ma non troppo

    comunque volevo capire anche se per caso c'è una funzione che restituisce la memoria che sta usando lo script.

    ciao grazie ancora
    teo

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    141
    forse
    int memory_get_usage ( void );
    ?
    VVoVe:

  10. #10
    Originariamente inviato da teoteo6
    comunque volevo capire anche se per caso c'è una funzione che restituisce la memoria che sta usando lo script.
    memory_get_usage()

    Non funziona su Windows però.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.