mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 19:22:24 -06:00 
			
		
		
		
	* use disintegration/imaging instead of nfnt/resize * update tests * use disintegration lib for thumbing (if necessary)
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2011 The Go Authors. All rights reserved.
 | 
						|
// Use of this source code is governed by a BSD-style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
package tiff
 | 
						|
 | 
						|
import (
 | 
						|
	"bufio"
 | 
						|
	"io"
 | 
						|
)
 | 
						|
 | 
						|
type byteReader interface {
 | 
						|
	io.Reader
 | 
						|
	io.ByteReader
 | 
						|
}
 | 
						|
 | 
						|
// unpackBits decodes the PackBits-compressed data in src and returns the
 | 
						|
// uncompressed data.
 | 
						|
//
 | 
						|
// The PackBits compression format is described in section 9 (p. 42)
 | 
						|
// of the TIFF spec.
 | 
						|
func unpackBits(r io.Reader) ([]byte, error) {
 | 
						|
	buf := make([]byte, 128)
 | 
						|
	dst := make([]byte, 0, 1024)
 | 
						|
	br, ok := r.(byteReader)
 | 
						|
	if !ok {
 | 
						|
		br = bufio.NewReader(r)
 | 
						|
	}
 | 
						|
 | 
						|
	for {
 | 
						|
		b, err := br.ReadByte()
 | 
						|
		if err != nil {
 | 
						|
			if err == io.EOF {
 | 
						|
				return dst, nil
 | 
						|
			}
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		code := int(int8(b))
 | 
						|
		switch {
 | 
						|
		case code >= 0:
 | 
						|
			n, err := io.ReadFull(br, buf[:code+1])
 | 
						|
			if err != nil {
 | 
						|
				return nil, err
 | 
						|
			}
 | 
						|
			dst = append(dst, buf[:n]...)
 | 
						|
		case code == -128:
 | 
						|
			// No-op.
 | 
						|
		default:
 | 
						|
			if b, err = br.ReadByte(); err != nil {
 | 
						|
				return nil, err
 | 
						|
			}
 | 
						|
			for j := 0; j < 1-code; j++ {
 | 
						|
				buf[j] = b
 | 
						|
			}
 | 
						|
			dst = append(dst, buf[:1-code]...)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |