È possibile incorporare più programmi in 1

0

Per essere più specifici, lascia che ti spieghi il mio obiettivo finale o più di quello che mi piacerebbe avere un giorno e poi puoi dirmi se è persino possibile e se non addirittura un metodo alternativo.

Mi piacerebbe davvero avere uno strumento come smush.it è un sito web che esegue Yahoo che ottimizza le immagini, è attualmente uno dei migliori là fuori. Le pagine FAQ dicono che usano tutti questi programmi per farlo ...

ImageMagick: per identificare il tipo di immagine e convertire i file GIF in file PNG.
pngcrush: per rimuovere i pezzi non necessari dai PNG. Stiamo anche sperimentando altri strumenti di riduzione PNG come pngout, optipng, pngrewrite . Speriamo che questi strumenti offrano una migliore ottimizzazione dei file PNG.
jpegtran: per rimuovere tutti i metadati dai JPEG (attualmente disabilitati) e provare i JPEG progressivi. gifsicle: per ottimizzare le animazioni GIF eliminando i pixel ripetuti in diversi fotogrammi. Ulteriori informazioni sul processo di smush sono disponibili nella sezione Ottimizza immagini di Best Practices per le pagine Web ad alte prestazioni.

Quindi in pratica si carica un'immagine e si determina il suo tipo di file e la si esegue attraverso i programmi o i programmi appropriati e restituisce un'immagine ottimizzata e indica la dimensione originale e le nuove dimensioni dell'immagine.

Se esegui una ricerca su StackOverflow vedrai che molte persone stanno cercando un programma tutto in uno in grado di farlo, principalmente dalla riga di comando per gli script Build da utilizzare.

Ora sono curioso, è possibile creare un programma che potrebbe essere come un pacchetto che includerebbe tutti questi altri programmi in esso, quindi su Windows sarebbe come 1 file exe o anche un file jar potrebbe funzionare come So che Yahoo ha un file jar per la compressione Javascript che il mio script Build può usare.

Nelle mie ricerche ho trovato un progetto simile ma non sono sicuro che sia davvero quello che sto cercando, è link utilizza usi OptiPNG, PNGCrush, AdvPNG, JPEGOptim. Il mio problema con questo 1 è che prima di tutto non lo rilasciano per Windows ma dicono che potrebbe essere in grado di funzionare su Windows, ma principalmente ho visto il codice sorgente ed è solo un mucchio di script Python, anche i programmi che usa , tutti devono essere installati separatamente.

Il mio obiettivo è essere in grado di non dover installare 4-5 programmi separati ma averli come 1

Per favore dimmi se questo è solo un sogno o qualcosa che è id possibile, ho solo un background PHP così difficile la conoscenza per un progetto come questo

    
posta JasonDavis 19.12.2011 - 13:38
fonte

3 risposte

4

Naturalmente questo è tecnicamente possibile. In effetti, la maggior parte dei software là fuori fa qualcosa di simile, quindi non parlerò ulteriormente degli aspetti tecnici qui. Se hai problemi con questo, potresti voler fare una domanda più specifica qui o su stackoverflow.com.

Tuttavia, ci sono altri punti che potresti voler considerare:

  • Di solito, non raggruppare i programmi come file .exe, ma piuttosto includere le versioni di libreria di questi. Ad esempio, ImageMagick stesso sta già raggruppando diverse librerie grafiche (opzionalmente anche), come libpng o libjpeg. Un altro esempio è la transcodifica, che fa cose simili con i filmati anziché con le immagini. Innanzitutto, questo approccio consente di accedere direttamente alle API alle altre librerie e, in secondo luogo, non è necessario spedire più file .exe e, eventualmente, confondere gli utenti su quale di essi deve essere eseguito.

  • Il problema principale da un punto di vista non tecnico è il problema della ridistribuzione, quando prendi il progetto di qualcun altro e semplicemente lo fai parte del tuo programma. Non tutti i programmi esistenti ti consentono di farlo. Devi stare molto attento alle licenze con cui questi programmi sono stati pubblicati. Una soluzione che a volte mi capita di vedere è quella di richiedere agli utenti di installare effettivamente il software di terze parti e il programma controlla la presenza di quest'ultimo in modo dinamico durante l'esecuzione. Anche se non è quello che sembri volere, posso solo esortarti a fare ancora attenzione alla licenza.

risposta data 19.12.2011 - 13:50
fonte
0

Quello che sembra voler fare è il seguente:

  • scrivi una parte del programma che prende solo un'immagine generica
  • individua il tipo di file di immagini
  • passa l'immagine a un modulo specifico responsabile per quel tipo di immagine
  • scegli uno dei seguenti
    • applica tutte le ottimizzazioni che hai
    • aggiungi un altro selettore che consegna l'immagine a un sottomodulo

Se sei nuovo alla programmazione, dai uno sguardo al "pattern decoratore". Ti aiuterà a passare la stessa immagine a più ottimizzatori di fila.

    
risposta data 19.12.2011 - 13:45
fonte
0

Supponendo che tu abbia accesso a tutto il codice sorgente, è probabilmente possibile, ma non molto utile.

Per prima cosa, dovresti essere sicuro che tutti i programmi (presumibilmente in C) non hanno conflitti di nomi, quindi nessun nome globale (eccetto main ) appare in più di un programma.

Quindi potresti collegare tutti i "quasi-programmi".

Indietro nel 1987? su SunOS3.5, le librerie condivise non esistevano, quindi Sun ha distribuito un singolo eseguibile che fondamentalmente ha testato il primo argomento del programma (che è il nome del programma) ed eseguito la cosa appropriata, usando qualcosa di simile a (assumendo tre programmi foo , bar e gee con i loro nomi globali con prefisso foo_ , bar_ , gee_ rispettivamente)

 /* the three main-s */
 extern int foo_main(int, char**);
 extern int bar_main(int, char**);
 extern int gee_main(int, char**);

 int main (int argc, char**argv)
 {
    if (!strcmp(argv[0], "foo"))
       return foo_main (argc, argv);
    else if (!strcmp(argv[0], "bar"))
       return bar_main (argc, argv);
    else if (!strcmp(argv[0], "gee"))
       return gee_main (argc, argv);
    else
       fprintf (stderr, 
               "expecting foo, bar, or gee as program, but got %s\n",
               argv[0]);
    return 3;
 }

PS. L'avrei chiesto su StackOverflow.

    
risposta data 19.12.2011 - 13:50
fonte

Leggi altre domande sui tag