NewWithForcedVersion constructs a QRCode of a specific version. var q *qrcode.QRCode q, err := qrcode.NewWithForcedVersion("my content", 25, qrcode.Medium) An error occurs in case of invalid version.
(content string, version int, level RecoveryLevel)
| 207 | // |
| 208 | // An error occurs in case of invalid version. |
| 209 | func NewWithForcedVersion(content string, version int, level RecoveryLevel) (*QRCode, error) { |
| 210 | var encoder *dataEncoder |
| 211 | |
| 212 | switch { |
| 213 | case version >= 1 && version <= 9: |
| 214 | encoder = newDataEncoder(dataEncoderType1To9) |
| 215 | case version >= 10 && version <= 26: |
| 216 | encoder = newDataEncoder(dataEncoderType10To26) |
| 217 | case version >= 27 && version <= 40: |
| 218 | encoder = newDataEncoder(dataEncoderType27To40) |
| 219 | default: |
| 220 | return nil, fmt.Errorf("Invalid version %d (expected 1-40 inclusive)", version) |
| 221 | } |
| 222 | |
| 223 | var encoded *bitset.Bitset |
| 224 | encoded, err := encoder.encode([]byte(content)) |
| 225 | |
| 226 | if err != nil { |
| 227 | return nil, err |
| 228 | } |
| 229 | |
| 230 | chosenVersion := getQRCodeVersion(level, version) |
| 231 | |
| 232 | if chosenVersion == nil { |
| 233 | return nil, errors.New("cannot find QR Code version") |
| 234 | } |
| 235 | |
| 236 | if encoded.Len() > chosenVersion.numDataBits() { |
| 237 | return nil, fmt.Errorf("Cannot encode QR code: content too large for fixed size QR Code version %d (encoded length is %d bits, maximum length is %d bits)", |
| 238 | version, |
| 239 | encoded.Len(), |
| 240 | chosenVersion.numDataBits()) |
| 241 | } |
| 242 | |
| 243 | q := &QRCode{ |
| 244 | Content: content, |
| 245 | |
| 246 | Level: level, |
| 247 | VersionNumber: chosenVersion.version, |
| 248 | |
| 249 | ForegroundColor: color.Black, |
| 250 | BackgroundColor: color.White, |
| 251 | |
| 252 | encoder: encoder, |
| 253 | data: encoded, |
| 254 | version: *chosenVersion, |
| 255 | } |
| 256 | |
| 257 | return q, nil |
| 258 | } |
| 259 | |
| 260 | // Bitmap returns the QR Code as a 2D array of 1-bit pixels. |
| 261 | // |
searching dependent graphs…