tag: high resolution thumbnails

This commit is contained in:
perennial
2024-10-21 19:59:33 +11:00
parent b591eb94a9
commit b94be981ce
3 changed files with 52 additions and 5 deletions
+6 -1
View File
@@ -34,7 +34,12 @@
<div class="col-lg-4 d-flex thumbnail-hover-dark">
<div class="thumbnail-wrapper rounded-top-5 rounded-start-lg-5 rounded-end-lg-0 w-100 overflow-hidden">
<a href="/artworks/{{ .Tag.Metadata.ID }}">
<img src="{{ .Tag.Metadata.Image }}" alt="{{ .Tag.Name }}" class="img-fluid w-100 h-100 object-fit-cover" />
<img
srcset="{{ .Tag.Metadata.Image }}, {{ .Tag.Metadata.ImageMaster }} 2x"
src="{{ .Tag.Metadata.ImageMaster }}"
alt="{{ .Tag.Name }}"
class="img-fluid w-100 h-100 object-fit-cover"
/>
</a>
</div>
</div>
+43 -4
View File
@@ -2,6 +2,8 @@ package core
import (
"net/http"
"net/url"
"regexp"
"strings"
"codeberg.org/vnpower/pixivfe/v2/audit"
@@ -13,10 +15,11 @@ type TagDetail struct {
Name string `json:"tag"`
AlternativeName string `json:"word"`
Metadata struct {
Detail string `json:"abstract"`
Image string `json:"image"`
Name string `json:"tag"`
ID json.Number `json:"id"`
Detail string `json:"abstract"`
Image string `json:"image"` // The original image URL as returned by the API
ImageMaster string // The higher resolution version obtained by transformImageURL
Name string `json:"tag"`
ID json.Number `json:"id"`
} `json:"pixpedia"`
}
@@ -78,6 +81,32 @@ func (s SearchPageSettings) ReturnMap() map[string]string {
}
}
// transformImageURL replaces the "/c/{parameters}/" segment in the image URL with "/".
//
// Regex matching is used instead of simple substring replacement for flexibility.
func transformImageURL(auditor *audit.Auditor, inputURL string) (string, error) {
auditor.SugaredLogger.Debugf("transformImageURL provided with original URL: %s", inputURL)
// Parse the URL to ensure it's valid and to manipulate its path
parsedURL, err := url.Parse(inputURL)
if err != nil {
auditor.SugaredLogger.Errorf("transformImageURL found invalid URL '%s': %v", inputURL, err)
return "", err
}
// Define a regex to match the "/c/{parameters}/" segment and replace it with "/"
re := regexp.MustCompile(`/c/[^/]+/`)
updatedPath := re.ReplaceAllString(parsedURL.Path, "/")
// Update the path in the parsed URL and reconstruct the full URL
parsedURL.Path = updatedPath
updatedURL := parsedURL.String()
auditor.SugaredLogger.Debugf("transformImageURL returned transformed URL: %s", updatedURL)
return updatedURL, nil
}
func GetTagData(auditor *audit.Auditor, r *http.Request, name string) (TagDetail, error) {
var tag TagDetail
@@ -95,6 +124,16 @@ func GetTagData(auditor *audit.Auditor, r *http.Request, name string) (TagDetail
return tag, err
}
auditor.SugaredLogger.Debugf("testesetsetsetse: %s", tag.Metadata.Image)
// Call transformImageURL to obtain a higher resolution thumbnail
originalImageURL := tag.Metadata.Image
masterURL, err := transformImageURL(auditor, originalImageURL)
if err != nil {
return tag, err
}
tag.Metadata.ImageMaster = masterURL
return tag, nil
}
+3
View File
@@ -70,6 +70,9 @@ func TagPage(auditor *audit.Auditor, w http.ResponseWriter, r *http.Request) err
ActiveSearchMode: GetQueryParam(r, "smode", ""),
}
PreloadImage(w, tag.Metadata.Image)
PreloadImage(w, tag.Metadata.ImageMaster)
return RenderHTML(w, r, data)
}