mirror of
https://github.com/stashapp/stash.git
synced 2025-12-06 16:34:02 +01:00
Change thumbnail default size and resize algorithm (#336)
* Change thumbnail resize algorithm and add size parameter * Height -> Width * Change default size from 100px to 200px * Height -> width
This commit is contained in:
parent
03c07a429d
commit
6a6e8d8875
10 changed files with 30 additions and 21 deletions
|
|
@ -27,9 +27,16 @@ func (rs galleryRoutes) File(w http.ResponseWriter, r *http.Request) {
|
||||||
thumb := r.URL.Query().Get("thumb")
|
thumb := r.URL.Query().Get("thumb")
|
||||||
w.Header().Add("Cache-Control", "max-age=604800000") // 1 Week
|
w.Header().Add("Cache-Control", "max-age=604800000") // 1 Week
|
||||||
if thumb == "true" {
|
if thumb == "true" {
|
||||||
_, _ = w.Write(gallery.GetThumbnail(fileIndex))
|
_, _ = w.Write(gallery.GetThumbnail(fileIndex, 200))
|
||||||
} else {
|
} else if thumb == "" {
|
||||||
_, _ = w.Write(gallery.GetImage(fileIndex))
|
_, _ = w.Write(gallery.GetImage(fileIndex))
|
||||||
|
} else {
|
||||||
|
width, err := strconv.ParseInt(thumb, 0, 64)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, http.StatusText(400), 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, _ = w.Write(gallery.GetThumbnail(fileIndex, int(width)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ var once sync.Once
|
||||||
type flagStruct struct {
|
type flagStruct struct {
|
||||||
configFilePath string
|
configFilePath string
|
||||||
}
|
}
|
||||||
|
|
||||||
var flags = flagStruct{}
|
var flags = flagStruct{}
|
||||||
|
|
||||||
func GetInstance() *singleton {
|
func GetInstance() *singleton {
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ import (
|
||||||
"github.com/stashapp/stash/pkg/utils"
|
"github.com/stashapp/stash/pkg/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func DestroyScene(sceneID int, tx *sqlx.Tx) (error) {
|
func DestroyScene(sceneID int, tx *sqlx.Tx) error {
|
||||||
qb := models.NewSceneQueryBuilder()
|
qb := models.NewSceneQueryBuilder()
|
||||||
jqb := models.NewJoinsQueryBuilder()
|
jqb := models.NewJoinsQueryBuilder()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ const testExtension = ".mp4"
|
||||||
const existingStudioName = "ExistingStudio"
|
const existingStudioName = "ExistingStudio"
|
||||||
|
|
||||||
const existingStudioSceneName = testName + ".dontChangeStudio" + testExtension
|
const existingStudioSceneName = testName + ".dontChangeStudio" + testExtension
|
||||||
|
|
||||||
var existingStudioID int
|
var existingStudioID int
|
||||||
|
|
||||||
var testSeparators = []string{
|
var testSeparators = []string{
|
||||||
|
|
|
||||||
|
|
@ -52,13 +52,13 @@ func (g *Gallery) GetImage(index int) []byte {
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Gallery) GetThumbnail(index int) []byte {
|
func (g *Gallery) GetThumbnail(index int, width int) []byte {
|
||||||
data, _ := g.readZipFile(index)
|
data, _ := g.readZipFile(index)
|
||||||
srcImage, _, err := image.Decode(bytes.NewReader(data))
|
srcImage, _, err := image.Decode(bytes.NewReader(data))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
resizedImage := imaging.Resize(srcImage, 100, 0, imaging.NearestNeighbor)
|
resizedImage := imaging.Resize(srcImage, width, 0, imaging.Box)
|
||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
err = jpeg.Encode(buf, resizedImage, nil)
|
err = jpeg.Encode(buf, resizedImage, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -162,8 +162,8 @@ func (qb *SceneMarkerQueryBuilder) Query(sceneMarkerFilter *SceneMarkerFilterTyp
|
||||||
havingClauses = append(havingClauses, "((COUNT(DISTINCT ptj.id) + COUNT(DISTINCT tj.tag_id)) >= "+strconv.Itoa(requiredCount)+")")
|
havingClauses = append(havingClauses, "((COUNT(DISTINCT ptj.id) + COUNT(DISTINCT tj.tag_id)) >= "+strconv.Itoa(requiredCount)+")")
|
||||||
} else if tagsFilter.Modifier == CriterionModifierExcludes {
|
} else if tagsFilter.Modifier == CriterionModifierExcludes {
|
||||||
// excludes all of the provided ids
|
// excludes all of the provided ids
|
||||||
whereClauses = append(whereClauses, "scene_markers.primary_tag_id not in " + getInBinding(length))
|
whereClauses = append(whereClauses, "scene_markers.primary_tag_id not in "+getInBinding(length))
|
||||||
whereClauses = append(whereClauses, "not exists (select smt.scene_marker_id from scene_markers_tags as smt where smt.scene_marker_id = scene_markers.id and smt.tag_id in " + getInBinding(length) + ")")
|
whereClauses = append(whereClauses, "not exists (select smt.scene_marker_id from scene_markers_tags as smt where smt.scene_marker_id = scene_markers.id and smt.tag_id in "+getInBinding(length)+")")
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tagID := range tagsFilter.Value {
|
for _, tagID := range tagsFilter.Value {
|
||||||
|
|
@ -191,7 +191,7 @@ func (qb *SceneMarkerQueryBuilder) Query(sceneMarkerFilter *SceneMarkerFilterTyp
|
||||||
havingClauses = append(havingClauses, "COUNT(DISTINCT scene_tags_join.tag_id) >= "+strconv.Itoa(requiredCount))
|
havingClauses = append(havingClauses, "COUNT(DISTINCT scene_tags_join.tag_id) >= "+strconv.Itoa(requiredCount))
|
||||||
} else if sceneTagsFilter.Modifier == CriterionModifierExcludes {
|
} else if sceneTagsFilter.Modifier == CriterionModifierExcludes {
|
||||||
// excludes all of the provided ids
|
// excludes all of the provided ids
|
||||||
whereClauses = append(whereClauses, "not exists (select st.scene_id from scenes_tags as st where st.scene_id = scene.id AND st.tag_id IN " + getInBinding(length) + ")")
|
whereClauses = append(whereClauses, "not exists (select st.scene_id from scenes_tags as st where st.scene_id = scene.id AND st.tag_id IN "+getInBinding(length)+")")
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tagID := range sceneTagsFilter.Value {
|
for _, tagID := range sceneTagsFilter.Value {
|
||||||
|
|
@ -217,7 +217,7 @@ func (qb *SceneMarkerQueryBuilder) Query(sceneMarkerFilter *SceneMarkerFilterTyp
|
||||||
havingClauses = append(havingClauses, "COUNT(DISTINCT scene_performers.performer_id) >= "+strconv.Itoa(requiredCount))
|
havingClauses = append(havingClauses, "COUNT(DISTINCT scene_performers.performer_id) >= "+strconv.Itoa(requiredCount))
|
||||||
} else if performersFilter.Modifier == CriterionModifierExcludes {
|
} else if performersFilter.Modifier == CriterionModifierExcludes {
|
||||||
// excludes all of the provided ids
|
// excludes all of the provided ids
|
||||||
whereClauses = append(whereClauses, "not exists (select sp.scene_id from performers_scenes as sp where sp.scene_id = scene.id AND sp.performer_id IN " + getInBinding(length) + ")")
|
whereClauses = append(whereClauses, "not exists (select sp.scene_id from performers_scenes as sp where sp.scene_id = scene.id AND sp.performer_id IN "+getInBinding(length)+")")
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, performerID := range performersFilter.Value {
|
for _, performerID := range performersFilter.Value {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue