diff --git a/docroot/style.css b/docroot/style.css index 45bcb2d..cbf1dba 100644 --- a/docroot/style.css +++ b/docroot/style.css @@ -204,4 +204,16 @@ main { .selectBoxes-drop-down-trigger:hover > .selectBoxes-dropdown { display: inline-block; } - +.output-box-format { + border: 1px solid #999; + padding: 1px 6px; + margin-bottom: 0.2em; + border-radius: 3px; + line-height: 2em; +} +.ouput-box-format-self { + background-color: #eaeaea; +} +.output-box-format-other { + background-color: #fff; +} diff --git a/src/app.cpp b/src/app.cpp index e4a6679..52edf33 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -473,20 +473,43 @@ void App::imageUploaded(Wt::WFileUpload *fileWidget, std::shared_ptrspoolFileName()); std::list previewList; std::list localList; - std::transform(originalImages.begin(), originalImages.end(), std::back_inserter(previewList), [](const Magick::Image& img) { return img; }); - std::transform(originalImages.begin(), originalImages.end(), std::back_inserter(localList), [](const Magick::Image& img) { return img; }); - bool isAnimated = !originalImages.empty() && originalImages.front().scene() > 1; - if (isAnimated) { - Magick::coalesceImages(&previewList, previewList.begin(), previewList.end()); - Magick::coalesceImages(&localList, localList.begin(), localList.end()); - } - auto resize = [](std::string size, std::list &imagesList) { - for (auto &frame : imagesList) { - frame.resize(size); + + // Maximale Größen für Vorschau und lokale Liste festlegen + int maxPreviewWidth = 100; + int maxPreviewHeight = 100; + int maxLocalWidth = 500; + int maxLocalHeight = 500; + + // Originalgröße des ersten Bildes erhalten + int originalWidth = originalImages.front().columns(); + int originalHeight = originalImages.front().rows(); + + // Vorschau- und lokale Größe berechnen + int previewWidth = std::min(originalWidth, maxPreviewWidth); + int previewHeight = std::min(originalHeight, maxPreviewHeight); + int localWidth = std::min(originalWidth, maxLocalWidth); + int localHeight = std::min(originalHeight, maxLocalHeight); + + // Größenänderung für alle Frames durchführen + for (const auto& img : originalImages) { + // Größenänderung nur durchführen, wenn das Bild größer als die maximalen Größen ist + if (originalWidth > maxPreviewWidth || originalHeight > maxPreviewHeight) { + Magick::Image resizedPreview = img; + resizedPreview.resize(Magick::Geometry(previewWidth, previewHeight)); + previewList.push_back(resizedPreview); + } else { + previewList.push_back(img); // Originalgröße beibehalten } - }; - resize("100x100^", previewList); - resize("500x500^", localList); + + if (originalWidth > maxLocalWidth || originalHeight > maxLocalHeight) { + Magick::Image resizedLocal = img; + resizedLocal.resize(Magick::Geometry(localWidth, localHeight)); + localList.push_back(resizedLocal); + } else { + localList.push_back(img); // Originalgröße beibehalten + } + } + Magick::Blob resizedBlob; Magick::writeImages(previewList.begin(), previewList.end(), &resizedBlob); Magick::writeImages(localList.begin(), localList.end(), &(*localImage)); @@ -504,8 +527,6 @@ void App::imageUploaded(Wt::WFileUpload *fileWidget, std::shared_ptrsetToolTip(line["timestamp"]); + item->setStyleClass("output-box-format"); + item->addStyleClass(writer == "you" ? "ouput-box-format-self" : "output-box-format-other"); item->setInline(false); }