]> source.dussan.org Git - gitea.git/commitdiff
Show image size on view page (#25884)
authorJakobDev <jakobdev@gmx.de>
Mon, 31 Jul 2023 05:04:45 +0000 (07:04 +0200)
committerGitHub <noreply@github.com>
Mon, 31 Jul 2023 05:04:45 +0000 (05:04 +0000)
This simply shows the Image size on the view page. This is useful, if
you search a image with a specific size.

![grafik](https://github.com/go-gitea/gitea/assets/15185051/9868e361-1c2e-447f-b824-70aa28bafcbc)

routers/web/repo/view.go
templates/repo/file_info.tmpl

index ae22bae9c1aa7f46f1a91164a5c7cd8de175f05b..9e6b3e78257636b9ecc1474a48e2113ec779d949 100644 (file)
@@ -9,6 +9,7 @@ import (
        gocontext "context"
        "encoding/base64"
        "fmt"
+       "image"
        "io"
        "net/http"
        "net/url"
@@ -16,6 +17,10 @@ import (
        "strings"
        "time"
 
+       _ "image/gif"  // for processing gif images
+       _ "image/jpeg" // for processing jpeg images
+       _ "image/png"  // for processing png images
+
        activities_model "code.gitea.io/gitea/models/activities"
        admin_model "code.gitea.io/gitea/models/admin"
        asymkey_model "code.gitea.io/gitea/models/asymkey"
@@ -44,6 +49,9 @@ import (
        issue_service "code.gitea.io/gitea/services/issue"
 
        "github.com/nektos/act/pkg/model"
+
+       _ "golang.org/x/image/bmp"  // for processing bmp images
+       _ "golang.org/x/image/webp" // for processing webp images
 )
 
 const (
@@ -578,6 +586,15 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
                }
        }
 
+       if fInfo.st.IsImage() && !fInfo.st.IsSvgImage() {
+               img, _, err := image.DecodeConfig(bytes.NewReader(buf))
+               if err == nil {
+                       // There are Image formats go can't decode
+                       // Instead of throwing an error in that case, we show the size only when we can decode
+                       ctx.Data["ImageSize"] = fmt.Sprintf("%dx%dpx", img.Width, img.Height)
+               }
+       }
+
        if ctx.Repo.CanEnableEditor(ctx, ctx.Doer) {
                if lfsLock != nil && lfsLock.OwnerID != ctx.Doer.ID {
                        ctx.Data["CanDeleteFile"] = false
index 44256a0dcb21ce70dbb7b4459a5a9ff1fb7e3adf..7323b30d77b53d97c65fe6aaaef78ee451d11adb 100644 (file)
@@ -30,4 +30,9 @@
                        {{.locale.Tr "repo.executable_file"}}
                </div>
        {{end}}
+       {{if .ImageSize}}
+               <div class="file-info-entry">
+                       {{.ImageSize}}
+               </div>
+       {{end}}
 </div>