Progressive thumbs, webp

pull/1615/head
Piero Toffanin 2025-02-19 16:18:10 -05:00
rodzic 4793e6add7
commit 1b3be7eee2
4 zmienionych plików z 15 dodań i 17 usunięć

Wyświetl plik

@ -125,7 +125,7 @@ class Thumbnail(TaskNestedView):
img.thumbnail((thumb_size, thumb_size))
output = io.BytesIO()
img.save(output, format='JPEG', quality=quality)
img.save(output, format='JPEG', quality=quality, progressive=True)
res = HttpResponse(content_type="image/jpeg")
res['Content-Disposition'] = 'inline'

Wyświetl plik

@ -437,15 +437,8 @@ class TaskThumbnail(TaskNestedView):
if orthophoto_path is None:
raise exceptions.NotFound()
try:
thumb_size = int(self.request.query_params.get('size', 512))
if thumb_size < 1 or thumb_size > 2048:
raise ValueError()
quality = int(self.request.query_params.get('quality', 75))
if quality < 0 or quality > 100:
raise ValueError()
except ValueError:
thumb_size = int(self.request.query_params.get('size', 512))
if thumb_size < 1 or thumb_size > 2048:
raise exceptions.ValidationError("Invalid query parameters")
with rasterio.open(orthophoto_path, "r") as raster:
@ -495,9 +488,14 @@ class TaskThumbnail(TaskNestedView):
img = Image.fromarray(img)
output = io.BytesIO()
img.save(output, format='PNG', quality=quality)
res = HttpResponse(content_type="image/png")
if 'image/webp' in request.META.get('HTTP_ACCEPT', ''):
img.save(output, format='WEBP')
res = HttpResponse(content_type="image/webp")
else:
img.save(output, format='PNG')
res = HttpResponse(content_type="image/png")
res['Content-Disposition'] = 'inline'
res.write(output.getvalue())
output.close()

Wyświetl plik

@ -434,10 +434,6 @@ class TaskListItem extends React.Component {
this.setState({thumbLoadFailed: true});
}
handleThumbLoad = e => {
console.log("LOADED")
}
render() {
const task = this.state.task;
const name = task.name !== null ? task.name : interpolate(_("Task #%(number)s"), { number: task.id });
@ -622,7 +618,7 @@ class TaskListItem extends React.Component {
{!this.state.thumbLoadFailed && task.status === statusCodes.COMPLETED ?
<div className="col-md-3 col-sm-2 text-center">
<a href={`/map/project/${task.project}/task/${task.id}/`}>
<img onLoad={this.handleThumbLoad} onError={this.handleThumbError} className="task-thumbnail" src={this.thumbnailUrl()} alt={_("Thumbnail")}/>
<img onError={this.handleThumbError} className="task-thumbnail" src={this.thumbnailUrl()} alt={_("Thumbnail")}/>
</a>
</div> : ""}

Wyświetl plik

@ -158,7 +158,11 @@
}
.task-thumbnail{
width: 156px;
height: 156px;
max-width: 100%;
max-height: 156px;
overflow: hidden;
&:hover{
opacity: 0.9;
}