jpeg resize (Anfängerfrage)
-
Huhu,
erst einmal eine Warnung: Ich bin Neuling in C++, auch wenn ich ganz gut damit klarkomme.
Deshalb weiß ich auch nicht, ob ich in diesem Unterforum richtig bin?
Nun zu meiner Frage:
Ich suche einen Weg, ein jpeg zu verkleinern.
Genauer, ich suche zwei Resizemöglichkeiten, einmal in der Größe auf dem Datenträger und einmal in den Außenmaßen.1. Das Ausgangsbild ist ~950 kB groß und soll (bei gleichen Außenmaßen) auf ~230 kB gebracht werden.
2. Das Ausgangsbild ist ~950 kB groß, hat ~1500x2300px Außenmaße und soll auf 530x750px verkleinert werden, bei einer Größe auf dem Datenträger von ~70 kB.
Tja, am besten fantasiere ich gar nicht mit eigenen Ideen herum (ich habe davon nun ausserhalb von Photoshop gar keine Ahnung ;), sondern gucke mal, ob ihr mir weiterhelfen könnt... wäre super!
Ich denke ich kann alles gebrauchen, Tutorials, Links, Anleitungen, Code - Englisch sollte auch kein Problem sein.
Großes Danke schon mal
Aragos
-
zu komplex für einen anfänger..sorry.
du müsstest jpeg entpacken und dann wieder neupacken, und jpeg ist imho sehr kompliziert.
vielleicht gibts irgendwo ne passende lib dafür, aber ich glaub das net
-
Wie wäre es damit, das jpeg einfach erneut zu komprimieren? Dazu muss ich es wahrscheinlich nicht dekomprimieren? (nur eine Idee
Tja... ich kenne mich ein bisschen mit den Grafikfunktionen von php aus (jaja, ich weiß, eine Scriptsprache _ )... Vielleicht kann mri das weiterhelfen?
Ansonsten, nehme ich auch so jede Hilfe an, wenn ich es dann nicht verstehe, hab ich halt Pech gehabt. Aber von 'zu komplex' hab ich mich noch nie schrecken lassen.
Aragos
-
Mit GDI+ kannst du jpeg's öffnen und speichern.
Wenn du die Dateigröße kleiner haben willst musste das Bild eben in ner niedrigeren Qualität speichern...
-
@aragos nein das geht nicht,da die daten die nach der bildkompression übrig bleiben,haben nurnoch wenig mit dem bild selber zu tun, wenn man ein jpeg bild anzeigen will, muss man es immer dekomprimieren
-
Benutc doch die ImageMagick Lib, die hat fertige Funktionen für Resize, komprimieren dekomprimieren etc.
-
So, nach ein paar Tagen Arbeit an anderen Projekten habe ich diesen Teilaspekt, den meine Frage hier behandelte abschließen können.
Ich bin mir nicht ganz sicher inwieweit hier im Forum Dokumentation verlangt wird, ich hoffe das Vorhandene ist ausreichend:
bool CopyAndResize(const unsigned short *source, CLSID encoderClsid, EncoderParameters encoderParameters) { Status stat; ULONG quality; //Declaration diskspace resize Image* image = new Image(source); //diskspace resize quality = 12; encoderParameters.Parameter[0].Value = &quality; stat = image->Save(L"test20.jpg", &encoderClsid, &encoderParameters); delete(image); //Declaration resolution resize Unit gUnit = UnitPixel; Bitmap* bm = new Bitmap(source); Bitmap* resized = new Bitmap((int)(0.3f*bm->GetWidth()),(int)(0.3f*bm->GetHeight())); Graphics* g = Graphics::FromImage(resized); RectF *gRect = new RectF(0,0,(int)(0.3f*bm->GetWidth()),(int)(0.3f*bm->GetHeight())); //resolution resize g->DrawImage(bm, *gRect,0,0,bm->GetWidth(),bm->GetHeight(), gUnit); delete(g); delete(bm); quality = 30; encoderParameters.Parameter[0].Value = &quality; stat = resized->Save(L"resized20.jpg", &encoderClsid, &encoderParameters); delete(resized); //return if(stat == Ok) return (TRUE); else return (FALSE); } /* Funktionsaufruf */ // Initialize GDI+. GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); CLSID encoderClsid; EncoderParameters encoderParameters; // Get the CLSID of the JPEG encoder. CLSID Funktion GetEncoderClsid(L"image/jpeg", &encoderClsid); //Encoder quality preparation encoderParameters.Count = 1; encoderParameters.Parameter[0].Guid = EncoderQuality; encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong; encoderParameters.Parameter[0].NumberOfValues = 1; //Bild bearbeiten if(CopyAndResize(L"test.jpg", encoderClsid, encoderParameters)) MessageBox(0,"Operation successfull","Alert",MB_OK); else MessageBox(0,"Operation failed","Alert",MB_OK); //GDI+ aus GdiplusShutdown(gdiplusToken);
Vielen Dank für alle Hilfe!
Die ImageMagick Lib habe ich mir dann nicht mehr angesehen, da ich schon mit GDI+ recht weit gekommen war. Werde ich aber demnächst mal machen.
Nochmal herzlichen Dank
Aragos
PS: Sorry für das Englisch/Deutsch Mischmasch, habe ich mir beim coden so angewöhnt...
-
Aragos schrieb:
Ich bin mir nicht ganz sicher inwieweit hier im Forum Dokumentation verlangt wird,
Wird für fundamental wichtig erachtet hier im Forum!!
Halt Dich nicht dran, und Du fliegst!!
Die Jungs kennen echt keine Gnade!!