Fix finding thumbnail size for /img-master/ images
https://pixwhile.zangetsu.kaizoku.cyou/artworks/115861083 https://pixwhile.zangetsu.kaizoku.cyou/artworks/116018582 https://pixwhile.zangetsu.kaizoku.cyou/artworks/84869687
This commit is contained in:
parent
e6f17d4b47
commit
6071c4720d
|
@ -308,21 +308,45 @@ static std::optional<std::pair<uint64_t, uint64_t>> get_thumbnail_size(blankie::
|
|||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::smatch sm;
|
||||
if (!std::regex_match(thumbnail_url.path, sm, illust_size_regex)) {
|
||||
return std::nullopt;
|
||||
}
|
||||
uint64_t thumbnail_width, thumbnail_height;
|
||||
|
||||
uint64_t thumbnail_width = to_ull(sm.str(1));
|
||||
// uint64_t thumbnail_height = to_ull(sm.str(2));
|
||||
if (thumbnail_url.path.starts_with("/img-master/")) {
|
||||
if (original_size->first <= 1200 && original_size->second <= 1200) {
|
||||
return original_size;
|
||||
}
|
||||
|
||||
// one side is implicitly 1200
|
||||
if (original_size->first >= original_size->second) {
|
||||
// original width >= original height
|
||||
|
||||
thumbnail_width = 1200;
|
||||
// derived from original_size->second / (original_size->first / thumbnail_width)
|
||||
// to make it more accurate without using floats
|
||||
thumbnail_height = original_size->second * thumbnail_width / original_size->first;
|
||||
} else {
|
||||
// original width < original height
|
||||
|
||||
thumbnail_height = 1200;
|
||||
// derived from original_size->first / (original_size->second / thumbnail_height)
|
||||
// to make it more accurate without using floats
|
||||
thumbnail_width = original_size->first * thumbnail_height / original_size->second;
|
||||
}
|
||||
} else {
|
||||
std::smatch sm;
|
||||
if (!std::regex_match(thumbnail_url.path, sm, illust_size_regex)) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
thumbnail_width = to_ull(sm.str(1));
|
||||
// thumbnail_height = to_ull(sm.str(2));
|
||||
|
||||
std::pair<uint64_t, uint64_t> real_thumbnail_size = {
|
||||
thumbnail_width,
|
||||
// derived from original_size->second / (original_size->first / thumbnail_width)
|
||||
// to make it more accurate without using floats
|
||||
original_size->second * thumbnail_width / original_size->first
|
||||
};
|
||||
return real_thumbnail_size;
|
||||
thumbnail_height = original_size->second * thumbnail_width / original_size->first;
|
||||
}
|
||||
|
||||
std::pair<uint64_t, uint64_t> thumbnail_size = {thumbnail_width, thumbnail_height};
|
||||
return thumbnail_size;
|
||||
}
|
||||
|
||||
static Images get_illust_images(const nlohmann::json& image, std::optional<nlohmann::json> image_metadata) {
|
||||
|
|
Loading…
Reference in New Issue